diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java index 3e90f2310884..53d71d9794fa 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java @@ -54,6 +54,8 @@ import com.intellij.openapi.util.*; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.openapi.wm.ToolWindow; +import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.psi.PsiElement; @@ -518,23 +520,33 @@ public abstract class ChooseByNameBase { else { Component oppositeComponent = e.getOppositeComponent(); if (oppositeComponent == myCheckBox) { - myTextField.requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true); return; } if (oppositeComponent != null && !(oppositeComponent instanceof JFrame) && myList.isShowing() && (oppositeComponent == myList || SwingUtilities.isDescendingFrom(myList, oppositeComponent))) { - myTextField.requestFocus();// Otherwise me may skip some KeyEvents + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true);// Otherwise me may skip some KeyEvents return; } + if (oppositeComponent != null) { + ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject); + ToolWindow toolWindow = toolWindowManager.getToolWindow(toolWindowManager.getActiveToolWindowId()); + if (toolWindow != null) { + JComponent toolWindowComponent = toolWindow.getComponent(); + if (SwingUtilities.isDescendingFrom(oppositeComponent, toolWindowComponent)) { + return; // Allow toolwindows to gain focus (used by QuickDoc shown in a toolwindow) + } + } + } + EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue(); if (queue instanceof IdeEventQueue) { if (!((IdeEventQueue)queue).wasRootRecentlyClicked(oppositeComponent)) { Component root = SwingUtilities.getRoot(myTextField); if (root != null && root.isShowing()) { - root.requestFocus(); - myTextField.requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true); return; } } @@ -641,7 +653,7 @@ public abstract class ChooseByNameBase { @Override public boolean onClick(@NotNull MouseEvent e, int clickCount) { if (!myTextField.hasFocus()) { - myTextField.requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(myTextField, true); } if (clickCount == 2) { |