diff -r f423d490ae1b modules/controls/src/main/java/javafx/scene/control/skin/ButtonSkin.java --- a/modules/controls/src/main/java/javafx/scene/control/skin/ButtonSkin.java Mon Oct 12 12:34:02 2015 -0700 +++ b/modules/controls/src/main/java/javafx/scene/control/skin/ButtonSkin.java Tue Oct 13 22:57:21 2015 +0200 @@ -64,7 +64,10 @@ Runnable defaultButtonRunnable = () -> { if (getSkinnable().getScene() != null && getSkinnable().impl_isTreeVisible() && !getSkinnable().isDisabled()) { - getSkinnable().fire(); + Node focusOwner = getSkinnable().getScene().getFocusOwner(); + if( focusOwner == getSkinnable() || !( focusOwner instanceof Button ) ) { + getSkinnable().fire(); + } } }; @@ -136,7 +139,7 @@ ** don't laugh, it can happen.... */ setCancelButton(true); - } + } } @@ -196,7 +199,7 @@ if (scene != null) { KeyCode acceleratorCode = KeyCode.ESCAPE; cancelAcceleratorKeyCodeCombination = new KeyCodeCombination(acceleratorCode); - + Runnable oldCancel = scene.getAccelerators().get(cancelAcceleratorKeyCodeCombination); if (!value) { /**