IDEA-177669

Focus returns to the editor instead of a tool window after canceling some dialogs
This commit is contained in:
Denis Fokin
2017-09-25 11:14:07 +03:00
parent 80cf0dcc03
commit 642af3c151
2 changed files with 23 additions and 8 deletions
@@ -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();
@@ -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<String> floatingWindowHandler;
private Consumer<String> windowedWindowHandler;
private Consumer<String> 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;