diff -r 356273aa4596 modules/controls/src/main/java/com/sun/javafx/scene/control/skin/MenuBarSkin.java --- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/MenuBarSkin.java Fri Oct 11 14:59:18 2013 -0700 +++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/MenuBarSkin.java Mon Oct 14 23:21:52 2013 -0700 @@ -65,6 +65,7 @@ import com.sun.javafx.stage.StageHelper; import com.sun.javafx.tk.Toolkit; import static com.sun.javafx.scene.traversal.Direction.DOWN; +import javafx.stage.Window; /** @@ -168,6 +169,8 @@ private WeakEventHandler weakSceneKeyEventHandler; private WeakEventHandler weakSceneMouseEventHandler; + private WeakChangeListener weakWindowFocusListener; + private WeakChangeListener weakWindowSceneListener; private EventHandler keyEventHandler; private EventHandler mouseEventHandler; private ChangeListener menuBarFocusedPropertyListener; @@ -289,16 +292,27 @@ weakSceneMouseEventHandler = new WeakEventHandler(mouseEventHandler); control.getScene().addEventFilter(MouseEvent.MOUSE_CLICKED, weakSceneMouseEventHandler); + weakWindowFocusListener = new WeakChangeListener(new ChangeListener() { + @Override public void changed(ObservableValue ov, Boolean t, Boolean t1) { + if (!t1) { + unSelectMenus(); + } + } + }); // When the parent window looses focus - menu selection should be cleared - control.getScene().getWindow().focusedProperty().addListener(new WeakChangeListener(new ChangeListener() { - @Override - public void changed(ObservableValue ov, Boolean t, Boolean t1) { - if (!t1) { - unSelectMenus(); - } - } - })); - + if (control.getScene().getWindow() != null) { + control.getScene().getWindow().focusedProperty().addListener(weakWindowFocusListener); + } else { + ChangeListener sceneWindowListener = new ChangeListener() { + @Override public void changed(ObservableValue observable, Window oldValue, Window newValue) { + if (oldValue != null) oldValue.focusedProperty().removeListener(weakWindowFocusListener); + if (newValue != null) newValue.focusedProperty().addListener(weakWindowFocusListener); + } + }; + weakWindowSceneListener = new WeakChangeListener(sceneWindowListener); + control.getScene().windowProperty().addListener(weakWindowSceneListener); + } + rebuildUI(); control.getMenus().addListener(new ListChangeListener() { @Override public void onChanged(Change c) {