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 9afedb62dd4f..7e007d7794a4 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 @@ -207,6 +207,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements Windows.toolWindows() .filterBySignal(new Windows.Signal(predicate)) + .withEscAction(actionManager) .handleDocked(toolWindowId -> {}) .handleFloating(toolWindowId -> {}) .handleFocusLostOnPinned(toolWindowId -> { @@ -217,13 +218,16 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements .handleWindowed(toolWindowId -> {}) .handleDeactivatingShortcut(toolWindowId -> { JComponent defaultFocusedComponentInEditor = null; - final EditorWindow window = getSplittersToFocus().getCurrentWindow(); - if (window != null) { - final EditorWithProviderComposite editor = window.getSelectedEditor(); - if (editor != null) { - defaultFocusedComponentInEditor = editor.getPreferredFocusedComponent(); - if (defaultFocusedComponentInEditor != null) { - defaultFocusedComponentInEditor.requestFocus(); + EditorsSplitters splittersToFocus = getSplittersToFocus(); + if (splittersToFocus != null) { + final EditorWindow window = splittersToFocus.getCurrentWindow(); + if (window != null) { + final EditorWithProviderComposite editor = window.getSelectedEditor(); + if (editor != null) { + defaultFocusedComponentInEditor = editor.getPreferredFocusedComponent(); + if (defaultFocusedComponentInEditor != null) { + defaultFocusedComponentInEditor.requestFocus(); + } } } } @@ -1718,7 +1722,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements final IdeFrame frame = FocusManagerImpl.getInstance().getLastFocusedFrame(); - if (frame != null) { + if (frame != null && frame instanceof IdeFrameImpl && ((IdeFrameImpl)frame).isActive()) { FileEditorManagerEx fem = FileEditorManagerEx.getInstanceEx(frame.getProject()); EditorsSplitters splitters = activeWindow != null ? fem.getSplittersFor(activeWindow) : null; return splitters != null ? splitters : fem.getSplitters(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/Windows.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/Windows.java index 51e7b08ee5fd..00c129b269fd 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/Windows.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/Windows.java @@ -17,14 +17,18 @@ package com.intellij.openapi.wm.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.actionSystem.ex.ActionUtil; +import com.intellij.openapi.keymap.Keymap; import com.intellij.openapi.keymap.KeymapManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.ActionCallback; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.FocusCommand; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.util.Alarm; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -33,6 +37,7 @@ import java.awt.event.AWTEventListener; import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.util.Arrays; +import java.util.List; import java.util.function.Consumer; import java.util.function.Predicate; @@ -47,6 +52,7 @@ public class Windows { private Consumer floatingWindowHandler; private Consumer windowedWindowHandler; private Consumer deactivationShortcutHandler; + private ActionManager myActionManager; private ToolWindowProvider(Signal signal) { mySignal = signal; @@ -77,6 +83,11 @@ public class Windows { return this; } + public ToolWindowProvider withEscAction(ActionManager actionManager) { + myActionManager = actionManager; + return this; + } + public static boolean isInActiveToolWindow (Object component) { JComponent source = ((component != null) && (component instanceof JComponent)) ? ((JComponent)component) : null;