From 5de45cb0af5093722f03c24bc5560db6159d2b84 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Thu, 25 Aug 2016 16:32:53 +0200 Subject: [PATCH] CPP-7479 Project tool window collapsed by default: handle potential situation when tool window is registered early --- .../platform/PlatformProjectViewOpener.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/platform/PlatformProjectViewOpener.java b/platform/lang-impl/src/com/intellij/platform/PlatformProjectViewOpener.java index 6e3bce77e6ac..35f27bb32b76 100644 --- a/platform/lang-impl/src/com/intellij/platform/PlatformProjectViewOpener.java +++ b/platform/lang-impl/src/com/intellij/platform/PlatformProjectViewOpener.java @@ -19,7 +19,9 @@ package com.intellij.platform; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; @@ -34,7 +36,27 @@ public class PlatformProjectViewOpener implements DirectoryProjectConfigurator { @Override public void configureProject(final Project project, @NotNull final VirtualFile baseDir, Ref moduleRef) { ToolWindowManagerEx manager = (ToolWindowManagerEx)ToolWindowManager.getInstance(project); - manager.addToolWindowManagerListener(new MyListener(manager, project)); + ToolWindow toolWindow = manager.getToolWindow(ToolWindowId.PROJECT_VIEW); + if (toolWindow == null) { + manager.addToolWindowManagerListener(new MyListener(manager, project)); + } + else { + StartupManager.getInstance(project).runWhenProjectIsInitialized(new DumbAwareRunnable() { + @Override + public void run() { + activateProjectToolWindow(project, toolWindow); + } + }); + } + } + + private static void activateProjectToolWindow(@NotNull Project project, @NotNull ToolWindow toolWindow) { + ApplicationManager.getApplication().invokeLater(() -> { + if (project.isDisposed()) return; + if (toolWindow.getType() != ToolWindowType.SLIDING) { + toolWindow.activate(null); + } + }, ModalityState.NON_MODAL); } private static class MyListener extends ToolWindowManagerAdapter { @@ -49,14 +71,7 @@ public class PlatformProjectViewOpener implements DirectoryProjectConfigurator { public void toolWindowRegistered(@NotNull final String id) { if (id.equals(ToolWindowId.PROJECT_VIEW)) { myManager.removeToolWindowManagerListener(this); - - ApplicationManager.getApplication().invokeLater(() -> { - if (myProject.isDisposed()) return; - ToolWindow toolWindow = myManager.getToolWindow(id); - if (toolWindow != null && toolWindow.getType() != ToolWindowType.SLIDING) { - toolWindow.activate(null); - } - }, ModalityState.NON_MODAL); + activateProjectToolWindow(myProject, myManager.getToolWindow(id)); } } }