From 8d4c33d6f68430add118d1e32f417a056a26453a Mon Sep 17 00:00:00 2001 From: John Hendrikx Date: Sun, 12 Feb 2023 23:11:28 +0100 Subject: [PATCH 1/2] Mnemonics should be hidden when Scene's window loses focus --- modules/javafx.graphics/src/main/java/javafx/scene/Scene.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/javafx.graphics/src/main/java/javafx/scene/Scene.java b/modules/javafx.graphics/src/main/java/javafx/scene/Scene.java index 4e48796b23b..e1689a5a897 100644 --- a/modules/javafx.graphics/src/main/java/javafx/scene/Scene.java +++ b/modules/javafx.graphics/src/main/java/javafx/scene/Scene.java @@ -2123,6 +2123,10 @@ private void setWindowFocused(boolean value) { if (windowFocused && accessible != null) { accessible.sendNotification(AccessibleAttribute.FOCUS_NODE); } + + if (!windowFocused) { + getInternalEventDispatcher().getKeyboardShortcutsHandler().setMnemonicsDisplayEnabled(false); + } } /** From 31536a3c9b2b8fabb3a821dd22e4d70fca6bf4ce Mon Sep 17 00:00:00 2001 From: John Hendrikx Date: Wed, 15 Feb 2023 23:19:40 +0100 Subject: [PATCH 2/2] Add test to verify scene disables mnemonics on focus lost --- .../java/test/javafx/scene/SceneTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/modules/javafx.graphics/src/test/java/test/javafx/scene/SceneTest.java b/modules/javafx.graphics/src/test/java/test/javafx/scene/SceneTest.java index 76b983dacbc..32aaf19167a 100644 --- a/modules/javafx.graphics/src/test/java/test/javafx/scene/SceneTest.java +++ b/modules/javafx.graphics/src/test/java/test/javafx/scene/SceneTest.java @@ -25,7 +25,9 @@ package test.javafx.scene; +import com.sun.javafx.scene.KeyboardShortcutsHandler; import com.sun.javafx.scene.NodeHelper; +import com.sun.javafx.scene.SceneEventDispatcher; import com.sun.javafx.scene.SceneHelper; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; @@ -1065,4 +1067,29 @@ public void testAddNullPostLayoutPulseListener() { JMemoryBuddy.assertCollectable(ref); } + + @Test + public void sceneShouldSet_MnemonicsDisplayEnabled_ToFalseWhenWindowFocusIsLost() { + Group root = new Group(); + + root.setFocusTraversable(true); + + Scene scene = new Scene(root); + SceneEventDispatcher dispatcher = (SceneEventDispatcher) scene.getEventDispatcher(); + KeyboardShortcutsHandler keyboardShortcutsHandler = dispatcher.getKeyboardShortcutsHandler(); + + stage.setScene(scene); + stage.show(); + stage.requestFocus(); + + assertFalse(keyboardShortcutsHandler.isMnemonicsDisplayEnabled()); + + keyboardShortcutsHandler.setMnemonicsDisplayEnabled(true); + + assertTrue(keyboardShortcutsHandler.isMnemonicsDisplayEnabled()); + + stage.close(); + + assertFalse(keyboardShortcutsHandler.isMnemonicsDisplayEnabled()); + } }