From 7be09afe685eaf2e963355f277f1096f37f7e626 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Sat, 29 Oct 2011 09:21:00 +0400 Subject: [PATCH] focus manager: tolerance against null focus in non-modal state --- .../wm/impl/ToolWindowManagerImpl.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java index 4a89efe7bcb0..972b583aaa14 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java @@ -45,10 +45,7 @@ import com.intellij.openapi.util.*; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.*; -import com.intellij.openapi.wm.ex.ToolWindowEx; -import com.intellij.openapi.wm.ex.ToolWindowManagerEx; -import com.intellij.openapi.wm.ex.ToolWindowManagerListener; -import com.intellij.openapi.wm.ex.WindowManagerEx; +import com.intellij.openapi.wm.ex.*; import com.intellij.openapi.wm.impl.commands.*; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.switcher.QuickAccessSettings; @@ -2131,8 +2128,27 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements else { activateToolWindow(activeId, forced, true); } + + return new ActionCallback.Done(); + } else { + Window activeWindow = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); + if (activeWindow != null) { + JRootPane root = null; + if (activeWindow instanceof JDialog) { + root = ((JDialog)activeWindow).getRootPane(); + } else if (activeWindow instanceof JFrame) { + root = ((JFrame)activeWindow).getRootPane(); + } + + if (root != null) { + JComponent toFocus = IdeFocusTraversalPolicy.getPreferredFocusedComponent(root); + if (toFocus != null) { + return IdeFocusManager.findInstanceByComponent(toFocus).requestFocus(toFocus, forced); + } + } + } } - return new ActionCallback.Done(); + return new ActionCallback.Rejected(); }