mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-177669
Focus returns to the editor instead of a tool window after canceling some dialogs
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user