From 3bdc36e172aa0ce7d6334ce2dbbb97553f85e305 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Tue, 8 Dec 2020 19:42:57 +0300 Subject: [PATCH] IDEA-211518: Open Project View and special files on first project opening GitOrigin-RevId: 47823cd089e62df96acfb311dddfb1f00c1dbe1f --- .../impl/ProjectViewToolWindowFactory.java | 25 +++++++++++++++++++ .../impl/FileEditorManagerImpl.java | 1 + .../fileEditor/impl/OpenFilesActivity.java | 24 +----------------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewToolWindowFactory.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewToolWindowFactory.java index 1d7347c9f7ac..8d4ccc6c998e 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewToolWindowFactory.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewToolWindowFactory.java @@ -2,15 +2,23 @@ package com.intellij.ide.projectView.impl; import com.intellij.ide.projectView.ProjectView; +import com.intellij.ide.util.RunOnceUtil; import com.intellij.openapi.application.ex.ApplicationInfoEx; +import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowFactory; +import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.openapi.wm.ex.ToolWindowEx; import com.intellij.ui.IdeUICustomization; +import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NotNull; +import javax.swing.JTree; + public final class ProjectViewToolWindowFactory implements ToolWindowFactory, DumbAware { @Override public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { @@ -21,5 +29,22 @@ public final class ProjectViewToolWindowFactory implements ToolWindowFactory, Du public void init(@NotNull ToolWindow window) { window.setIcon(IconLoader.getIcon(ApplicationInfoEx.getInstanceEx().getToolWindowIconUrl(), ProjectViewToolWindowFactory.class)); window.setStripeTitle(IdeUICustomization.getInstance().getProjectViewTitle()); + if (window instanceof ToolWindowEx && Registry.is("ide.open.project.view.on.startup")) { + Project project = ((ToolWindowEx)window).getProject(); + if (Boolean.TRUE.equals(project.getUserData(FileEditorManagerImpl.NOTHING_WAS_OPENED_ON_START))) { + RunOnceUtil.runOnceForProject(project, "OpenProjectViewOnStart", () -> { + ToolWindowManager manager = ToolWindowManager.getInstance(project); + manager.invokeLater(() -> { + if (null == manager.getActiveToolWindowId()) { + window.activate(() -> { + AbstractProjectViewPane pane = ProjectView.getInstance(project).getCurrentProjectViewPane(); + JTree tree = pane == null ? null : pane.getTree(); + if (tree != null) TreeUtil.promiseSelectFirst(tree).onSuccess(tree::expandPath); + }); + } + }); + }); + } + } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 25ecb80f1d68..f570d33ca08a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -107,6 +107,7 @@ import static com.intellij.openapi.actionSystem.IdeActions.ACTION_OPEN_IN_RIGHT_ public class FileEditorManagerImpl extends FileEditorManagerEx implements PersistentStateComponent, Disposable { private static final Logger LOG = Logger.getInstance(FileEditorManagerImpl.class); protected static final Key DUMB_AWARE = Key.create("DUMB_AWARE"); + public static final Key NOTHING_WAS_OPENED_ON_START = Key.create("NOTHING_WAS_OPENED_ON_START"); private static final FileEditorProvider[] EMPTY_PROVIDER_ARRAY = {}; public static final Key CLOSING_TO_REOPEN = Key.create("CLOSING_TO_REOPEN"); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/OpenFilesActivity.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/OpenFilesActivity.java index d0970a2d9373..8ae9e6925289 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/OpenFilesActivity.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/OpenFilesActivity.java @@ -14,16 +14,10 @@ import com.intellij.openapi.startup.StartupActivity; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import static com.intellij.openapi.wm.ToolWindowId.DATABASE_VIEW; -import static com.intellij.openapi.wm.ToolWindowId.PROJECT_VIEW; - final class OpenFilesActivity implements StartupActivity { @Override public void runActivity(@NotNull Project project) { @@ -48,12 +42,10 @@ final class OpenFilesActivity implements StartupActivity { manager.initDockableContentFactory(); EditorsSplitters.stopOpenFilesActivity(project); if (!manager.hasOpenFiles() && !ApplicationManager.getApplication().isHeadlessEnvironment()) { + project.putUserData(FileEditorManagerImpl.NOTHING_WAS_OPENED_ON_START, true); if (Registry.is("ide.open.readme.md.on.startup")) { RunOnceUtil.runOnceForProject(project, "ShowReadmeOnStart", () -> findAndOpenReadme(project, manager)); } - if (Registry.is("ide.open.project.view.on.startup")) { - RunOnceUtil.runOnceForProject(project, "OpenProjectViewOnStart", () -> openProjectView(project)); - } } }, project.getDisposed()); } @@ -68,18 +60,4 @@ final class OpenFilesActivity implements StartupActivity { } } } - - private static void openProjectView(@NotNull Project project) { - ToolWindowManager manager = ToolWindowManager.getInstance(project); - manager.invokeLater(() -> { - if (null == manager.getActiveToolWindowId()) { - ToolWindow window = manager.getToolWindow(PROJECT_VIEW); - if (window != null) window.activate(null); - if (PlatformUtils.isDataGrip()) { - ToolWindow databaseView = manager.getToolWindow(DATABASE_VIEW); - if (databaseView != null) databaseView.activate(null); - } - } - }); - } }