IDEA-211518: Open Project View and special files on first project opening

GitOrigin-RevId: 47823cd089e62df96acfb311dddfb1f00c1dbe1f
This commit is contained in:
Sergey Malenkov
2020-12-08 17:31:24 +00:00
committed by intellij-monorepo-bot
parent fdd99901db
commit 3bdc36e172
3 changed files with 27 additions and 23 deletions
@@ -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);
});
}
});
});
}
}
}
}
@@ -107,6 +107,7 @@ import static com.intellij.openapi.actionSystem.IdeActions.ACTION_OPEN_IN_RIGHT_
public class FileEditorManagerImpl extends FileEditorManagerEx implements PersistentStateComponent<Element>, Disposable {
private static final Logger LOG = Logger.getInstance(FileEditorManagerImpl.class);
protected static final Key<Boolean> DUMB_AWARE = Key.create("DUMB_AWARE");
public static final Key<Boolean> NOTHING_WAS_OPENED_ON_START = Key.create("NOTHING_WAS_OPENED_ON_START");
private static final FileEditorProvider[] EMPTY_PROVIDER_ARRAY = {};
public static final Key<Boolean> CLOSING_TO_REOPEN = Key.create("CLOSING_TO_REOPEN");
@@ -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);
}
}
});
}
}