From 33afa59ac67a9a6e3e608dd025d41fa20ec85395 Mon Sep 17 00:00:00 2001 From: Marat Khabibullin Date: Wed, 20 May 2020 14:39:21 +0300 Subject: [PATCH] Bugfix: do not activate Run/Debug tool window when myActivateToolWindow is false (GO-9369, IDEA-CR-1543) Before this fix if you pass 'false' to 'withActivateToolWindow' the tool window is shown but without focus. With the fix it is not shown in that case. To show it without focus new 'withFocusToolWindow' method is added. Along the way with this fix we avoid activating tool window twice in case of 'true' passed to 'withActivateToolWindow'. GitOrigin-RevId: 3b7928ba535ebbb365d7735034897d88f87f569e --- .../execution/RunContentExecutor.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/platform/execution-impl/src/com/intellij/execution/RunContentExecutor.java b/platform/execution-impl/src/com/intellij/execution/RunContentExecutor.java index db5cc43b397a..4931466a28be 100644 --- a/platform/execution-impl/src/com/intellij/execution/RunContentExecutor.java +++ b/platform/execution-impl/src/com/intellij/execution/RunContentExecutor.java @@ -22,8 +22,6 @@ import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.wm.ToolWindowId; -import com.intellij.openapi.wm.ToolWindowManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,6 +46,7 @@ public class RunContentExecutor implements Disposable { private String myTitle = "Output"; private String myHelpId = null; private boolean myActivateToolWindow = true; + private boolean myFocusToolWindow = true; /** * User-provided console that has to be used instead of newly created */ @@ -94,6 +93,11 @@ public class RunContentExecutor implements Disposable { return this; } + public RunContentExecutor withFocusToolWindow(boolean focusToolWindow) { + myFocusToolWindow = focusToolWindow; + return this; + } + private ConsoleView createConsole() { TextConsoleBuilder consoleBuilder = TextConsoleBuilderFactory.getInstance().createBuilder(myProject); consoleBuilder.filters(myFilterList); @@ -107,6 +111,8 @@ public class RunContentExecutor implements Disposable { final JComponent consolePanel = createConsolePanel(console, actions); RunContentDescriptor descriptor = new RunContentDescriptor(console, myProcess, consolePanel, myTitle); + descriptor.setActivateToolWindowWhenAdded(myActivateToolWindow); + descriptor.setAutoFocusContent(myFocusToolWindow); Disposer.register(descriptor, this); Disposer.register(descriptor, console); @@ -116,11 +122,6 @@ public class RunContentExecutor implements Disposable { actions.add(new CloseAction(executor, descriptor, myProject)); RunContentManager.getInstance(myProject).showRunContent(executor, descriptor); - - if (myActivateToolWindow) { - activateToolWindow(); - } - return console; } @@ -141,11 +142,6 @@ public class RunContentExecutor implements Disposable { myProcess.startNotify(); } - public void activateToolWindow() { - ApplicationManager.getApplication().invokeLater( - () -> ToolWindowManager.getInstance(myProject).getToolWindow(ToolWindowId.RUN).activate(null)); - } - private static JComponent createConsolePanel(ConsoleView view, ActionGroup actions) { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout());