-
Bug
-
Resolution: Fixed
-
P3
-
jfx11, jfx16, jfx17
-
b13
-
x86_64
-
linux
ADDITIONAL SYSTEM INFORMATION :
Ubuntu 18.04 x86_64
JavaFX 17
JavaFX 11
OpenJDK 11.0.11
A DESCRIPTION OF THE PROBLEM :
KeyCharacterCombinations involving characters that require the Shift key to type (like "+" on a US keyboard) never match any key event and do not work. The Linux implementation of the Toolkit call getKeyCodeForChar does not reference the current keyboard layout and so can't return correct results. For example, if the argument is "+" getKeyCodeForChar returns KeyCode.PLUS on all layouts. On a US layout it should return KeyCode.EQUALS.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the included test app.
Switch to a US English keyboard layout.
Press Ctrl+L to verify the app has focus.
Press Ctrl+'+'.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
On the Ctrl+L press you should see "KeyCodeCombination worked" on the console.
On the Ctrl+'+' press you should see "KeyCharacterCombination worked" on the console.
ACTUAL -
Only Ctrl+L generates console output. The Ctrl+'+' key event is ignored.
(use Command-L Command-+ on Mac)
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCodeCombination;
public class KeyCharComboTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("KeyCharacterCombination test");
Pane root = new Pane();
Scene scene = new Scene(root, 300, 250);
scene.getAccelerators().put(new KeyCodeCombination(KeyCode.L, KeyCombination.SHORTCUT_DOWN),
() -> System.out.println("KeyCodeCombination worked"));
scene.getAccelerators().put(new KeyCharacterCombination("+", KeyCombination.SHORTCUT_DOWN),
() -> System.out.println("KeyCharacterCombination worked"));
primaryStage.setScene(scene);
primaryStage.show();
}
}
---------- END SOURCE ----------
FREQUENCY : always
Ubuntu 18.04 x86_64
JavaFX 17
JavaFX 11
OpenJDK 11.0.11
A DESCRIPTION OF THE PROBLEM :
KeyCharacterCombinations involving characters that require the Shift key to type (like "+" on a US keyboard) never match any key event and do not work. The Linux implementation of the Toolkit call getKeyCodeForChar does not reference the current keyboard layout and so can't return correct results. For example, if the argument is "+" getKeyCodeForChar returns KeyCode.PLUS on all layouts. On a US layout it should return KeyCode.EQUALS.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the included test app.
Switch to a US English keyboard layout.
Press Ctrl+L to verify the app has focus.
Press Ctrl+'+'.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
On the Ctrl+L press you should see "KeyCodeCombination worked" on the console.
On the Ctrl+'+' press you should see "KeyCharacterCombination worked" on the console.
ACTUAL -
Only Ctrl+L generates console output. The Ctrl+'+' key event is ignored.
(use Command-L Command-+ on Mac)
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCodeCombination;
public class KeyCharComboTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("KeyCharacterCombination test");
Pane root = new Pane();
Scene scene = new Scene(root, 300, 250);
scene.getAccelerators().put(new KeyCodeCombination(KeyCode.L, KeyCombination.SHORTCUT_DOWN),
() -> System.out.println("KeyCodeCombination worked"));
scene.getAccelerators().put(new KeyCharacterCombination("+", KeyCombination.SHORTCUT_DOWN),
() -> System.out.println("KeyCharacterCombination worked"));
primaryStage.setScene(scene);
primaryStage.show();
}
}
---------- END SOURCE ----------
FREQUENCY : always
- links to
-
Commit(master) openjdk/jfx/c0757a2e
-
Review openjdk/jfx/694
-
Review(master) openjdk/jfx/1373