diff -r 374f5352788f javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuBarSkin.java --- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuBarSkin.java Thu Jul 12 16:02:44 2012 -0700 +++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuBarSkin.java Fri Jul 13 15:03:49 2012 -0700 @@ -65,11 +65,8 @@ import com.sun.javafx.scene.traversal.TraverseListener; import com.sun.javafx.stage.StageHelper; import com.sun.javafx.tk.Toolkit; -import java.lang.ref.WeakReference; -import java.util.logging.Level; -import java.util.logging.Logger; import javafx.event.ActionEvent; -import javafx.event.EventType; +import javafx.scene.control.*; import javafx.scene.input.*; @@ -177,7 +174,8 @@ private WeakEventHandler weakSceneMouseEventHandler; private EventHandler keyEventHandler; private EventHandler mouseEventHandler; - + private ChangeListener menuBarFocusedPropertyListener; + /*************************************************************************** * * * Constructors * @@ -210,7 +208,6 @@ break; case RIGHT: - case TAB: if (control.getScene().getWindow().isFocused()) { if (openMenu == null) return; if (! openMenu.isShowing()) { @@ -244,6 +241,21 @@ event.consume(); break; } + } + } + }; + menuBarFocusedPropertyListener = new ChangeListener() { + @Override public void changed(ObservableValue ov, Boolean t, Boolean t1) { + if (t1) { + // RT-23147 when MenuBar's focusTraversable is true the first + // menu will visually indicate focus + unSelectMenus(); + focusedMenuIndex = 0; + openMenuButton = ((MenuBarButton)container.getChildren().get(0)); + openMenu = getSkinnable().getMenus().get(0); + openMenuButton.setHover(); + } else { + unSelectMenus(); } } }; @@ -446,6 +458,7 @@ private void rebuildUI() { int index = 0; + getSkinnable().focusedProperty().removeListener(menuBarFocusedPropertyListener); for (Menu m : getSkinnable().getMenus()) { // remove action listeners updateActionListeners(getSkinnable().getMenus().get(index), false); @@ -517,7 +530,7 @@ } } - + getSkinnable().focusedProperty().addListener(menuBarFocusedPropertyListener); for (final Menu menu : getSkinnable().getMenus()) { if (!menu.isVisible()) continue; final MenuBarButton menuButton = new MenuBarButton(menu.getText(), menu.getGraphic()); diff -r 374f5352788f javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuButtonSkinBase.java --- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuButtonSkinBase.java Thu Jul 12 16:02:44 2012 -0700 +++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuButtonSkinBase.java Fri Jul 13 15:03:49 2012 -0700 @@ -99,7 +99,8 @@ label = new MenuLabeledImpl(getSkinnable()); label.setMnemonicParsing(control.isMnemonicParsing()); label.setLabelFor(control); - label.setFocusTraversable(true); + // Commenting below for RT-23141 and RT-23222 + // label.setFocusTraversable(true); arrow = new StackPane(); arrow.getStyleClass().setAll("arrow");