From 3e8981595dbfd07eedaa62acf5ded1ef8479dae6 Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Mon, 9 Dec 2013 18:48:43 +0400 Subject: [PATCH] IDEA-106716 Don't steal focus --- .../com/intellij/openapi/wm/FocusCommand.java | 24 +++++++++++++++++-- .../src/com/intellij/ui/Splash.java | 2 +- .../src/misc/registry.properties | 1 + 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/wm/FocusCommand.java b/platform/platform-api/src/com/intellij/openapi/wm/FocusCommand.java index 1fc5939e0396..3d8c4ff9cd3c 100644 --- a/platform/platform-api/src/com/intellij/openapi/wm/FocusCommand.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/FocusCommand.java @@ -19,6 +19,8 @@ import com.intellij.openapi.ui.popup.util.PopupUtil; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.ActiveRunnable; import com.intellij.openapi.util.Expirable; +import com.intellij.openapi.util.registry.Registry; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -149,8 +151,26 @@ public abstract class FocusCommand extends ActiveRunnable implements Expirable { @NotNull public final ActionCallback run() { if (myToFocus != null) { - if (!myToFocus.requestFocusInWindow()) { - myToFocus.requestFocus(); + if (Registry.is("actionSystem.doNotStealFocus")) { + Window topWindow = SwingUtilities.windowForComponent(myToFocus); + UIUtil.setAutoRequestFocus(topWindow, topWindow.isActive()); + while (topWindow.getOwner() != null) { + topWindow = SwingUtilities.windowForComponent(topWindow); + UIUtil.setAutoRequestFocus(topWindow, topWindow.isActive()); + } + + if (topWindow.isActive()) { + if (!myToFocus.requestFocusInWindow()) { + myToFocus.requestFocus(); + } + } else { + myToFocus.requestFocusInWindow(); + } + + } else { + if (!myToFocus.requestFocusInWindow()) { + myToFocus.requestFocus(); + } } } clear(); diff --git a/platform/platform-impl/src/com/intellij/ui/Splash.java b/platform/platform-impl/src/com/intellij/ui/Splash.java index 96f27cd4514b..c76bf7817bb9 100644 --- a/platform/platform-impl/src/com/intellij/ui/Splash.java +++ b/platform/platform-impl/src/com/intellij/ui/Splash.java @@ -60,6 +60,7 @@ public class Splash extends JDialog implements StartupProgress { setUndecorated(true); setResizable(false); setFocusableWindowState(false); + UIUtil.setAutoRequestFocus(this, false); Icon originalImage = IconLoader.getIcon(imageName); myImage = new SplashImage(originalImage, textColor); @@ -79,7 +80,6 @@ public class Splash extends JDialog implements StartupProgress { setSize(size); pack(); setLocationRelativeTo(null); - UIUtil.setAutoRequestFocus(this, false); } public Splash(ApplicationInfoEx info) { diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 0c172ec2e2f6..93ecf7eed6fc 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -29,6 +29,7 @@ actionSystem.mac.screenMenuNotUpdatedFix=false actionSystem.keyGestures.enabled=false actionSystem.keyGestureDblClickTime=500 actionSystem.suspendFocusTransferIfApplicationInactive=true +actionSystem.doNotStealFocus=false actionSystem.noContextComponentWhileFocusTransfer=true actionSystem.secondKeystrokeTimeout=2000 actionSystem.secondKeystrokeAutoPopupEnabled=false