--- old/modules/javafx.controls/src/main/java/javafx/scene/control/skin/MenuBarSkin.java 2017-06-07 14:34:28.246216255 +0530 +++ new/modules/javafx.controls/src/main/java/javafx/scene/control/skin/MenuBarSkin.java 2017-06-07 14:34:28.010216255 +0530 @@ -389,7 +389,8 @@ if (e.getEventType() == KeyEvent.KEY_PRESSED) { // Clear menu selection when ALT is pressed by itself altKeyPressed = false; - if (e.getCode() == ALT && !e.isConsumed()) { + if ((e.getCode() == ALT || + e.getCode() == ALT_GRAPH) && !e.isConsumed()) { if (focusedMenuIndex == -1) { altKeyPressed = true; } @@ -398,7 +399,8 @@ } else if (e.getEventType() == KeyEvent.KEY_RELEASED) { // Put focus on the first menu when ALT is released // directly after being pressed by itself - if (altKeyPressed && e.getCode() == ALT && !e.isConsumed()) { + if (altKeyPressed && (e.getCode() == ALT || + e.getCode() == ALT_GRAPH) && !e.isConsumed()) { firstMenuRunnable.run(); } altKeyPressed = false; --- old/modules/javafx.controls/src/test/java/test/javafx/scene/control/MenuBarTest.java 2017-06-07 14:34:28.818216255 +0530 +++ new/modules/javafx.controls/src/test/java/test/javafx/scene/control/MenuBarTest.java 2017-06-07 14:34:28.562216255 +0530 @@ -618,4 +618,50 @@ MenuBar menuBar = new MenuBar(); MenuBarSkin menuBarSkin = new MenuBarSkin(menuBar); } + + @Test public void testMenubarAltKeysupport() { + // First Menu gets selected when ALT key is pressed and released. + VBox root = new VBox(); + Menu menu1 = new Menu("Menu1"); + Menu menu2 = new Menu("Menu2"); + Menu menu3 = new Menu("Menu3"); + + MenuItem menuItem1 = new MenuItem("MenuItem1"); + MenuItem menuItem2 = new MenuItem("MenuItem2"); + MenuItem menuItem3 = new MenuItem("MenuItem3"); + + menu1.getItems().add(menuItem1); + menu2.getItems().add(menuItem2); + menu3.getItems().add(menuItem3); + + menuBar.getMenus().addAll(menu1, menu2, menu3); + root.getChildren().addAll(menuBar); + startApp(root); + tk.firePulse(); + + MenuBarSkin skin = (MenuBarSkin)menuBar.getSkin(); + assertTrue(skin != null); + + MenuButton mb = MenuBarSkinShim.getNodeForMenu(skin, 0); + mb.getScene().getWindow().requestFocus(); + KeyEventFirer keyboard = new KeyEventFirer(mb.getScene()); + + // Left ALT key + keyboard.doKeyPress(KeyCode.ALT); + tk.firePulse(); + keyboard.doDownArrowPress(); + tk.firePulse(); + assertTrue(menu1.isShowing()); + + keyboard.doKeyPress(KeyCode.ESCAPE); + tk.firePulse(); + + // Right ALT key + keyboard.doKeyPress(KeyCode.ALT_GRAPH); + tk.firePulse(); + keyboard.doDownArrowPress(); + tk.firePulse(); + assertTrue(menu1.isShowing()); + + } }