mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] move tabs disposal to log manager and fix VcsLogTabsWatcher dispose
This commit is contained in:
@@ -99,9 +99,9 @@ public class VcsLogContentProvider implements ChangesViewContentProvider {
|
||||
Disposer.dispose(ui);
|
||||
}
|
||||
|
||||
// other tabs
|
||||
// other ui
|
||||
if (logManager != null) {
|
||||
VcsLogContentUtil.closeLogTabs(myProject, logManager.getTabNames());
|
||||
logManager.disposeUi();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -152,16 +152,12 @@ public class VcsLogContentUtil {
|
||||
logUi.invokeOnChange(openLogAndRun);
|
||||
}
|
||||
|
||||
public static void closeLogTabs(@NotNull Project project, @NotNull Collection<String> tabs) {
|
||||
ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.VCS);
|
||||
|
||||
if (toolWindow != null) {
|
||||
for (String tabName : tabs) {
|
||||
Content content = toolWindow.getContentManager().findContent(tabName);
|
||||
LOG.assertTrue(content != null, "Could not find content for tab " + tabName);
|
||||
if (content.isCloseable()) {
|
||||
ContentsUtil.closeContentTab(toolWindow.getContentManager(), content);
|
||||
}
|
||||
public static void closeLogTabs(@NotNull ToolWindow toolWindow, @NotNull Collection<String> tabs) {
|
||||
for (String tabName : tabs) {
|
||||
Content content = toolWindow.getContentManager().findContent(tabName);
|
||||
LOG.assertTrue(content != null, "Could not find content for tab " + tabName);
|
||||
if (content.isCloseable()) {
|
||||
ContentsUtil.closeContentTab(toolWindow.getContentManager(), content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import javax.swing.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
public class VcsLogManager implements Disposable {
|
||||
@@ -75,7 +74,7 @@ public class VcsLogManager implements Disposable {
|
||||
Map<VirtualFile, VcsLogProvider> logProviders = findLogProviders(roots, myProject);
|
||||
myLogData = new VcsLogData(myProject, logProviders, new MyFatalErrorsHandler(), this);
|
||||
myPostponableRefresher = new PostponableLogRefresher(myLogData);
|
||||
myTabsLogRefresher = new VcsLogTabsWatcher(myProject, myPostponableRefresher, myLogData);
|
||||
myTabsLogRefresher = new VcsLogTabsWatcher(myProject, myPostponableRefresher);
|
||||
|
||||
refreshLogOnVcsEvents(logProviders, myPostponableRefresher, myLogData);
|
||||
|
||||
@@ -172,13 +171,13 @@ public class VcsLogManager implements Disposable {
|
||||
return logProviders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
public void disposeUi() {
|
||||
myTabsLogRefresher.closeLogTabs();
|
||||
Disposer.dispose(myTabsLogRefresher);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<String> getTabNames() {
|
||||
return myTabsLogRefresher.getTabNames();
|
||||
@Override
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
private class MyFatalErrorsHandler implements FatalErrorHandler {
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.intellij.vcs.log.impl;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
|
||||
@@ -36,7 +35,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.Set;
|
||||
|
||||
public class VcsLogTabsWatcher implements Disposable {
|
||||
private static final String TOOLWINDOW_ID = ChangesViewContentManager.TOOLWINDOW_ID;
|
||||
@@ -48,7 +46,7 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
@Nullable private ToolWindow myToolWindow;
|
||||
private boolean myIsVisible;
|
||||
|
||||
public VcsLogTabsWatcher(@NotNull Project project, @NotNull PostponableLogRefresher refresher, @NotNull Disposable parentDisposable) {
|
||||
public VcsLogTabsWatcher(@NotNull Project project, @NotNull PostponableLogRefresher refresher) {
|
||||
myRefresher = refresher;
|
||||
myToolWindowManager = ToolWindowManagerEx.getInstanceEx(project);
|
||||
|
||||
@@ -57,8 +55,6 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
myToolWindowManager.addToolWindowManagerListener(myPostponedEventsListener);
|
||||
installContentListener();
|
||||
});
|
||||
|
||||
Disposer.register(parentDisposable, this);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -86,11 +82,6 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
removeListeners();
|
||||
}
|
||||
|
||||
private void removeListeners() {
|
||||
myToolWindowManager.removeToolWindowManagerListener(myPostponedEventsListener);
|
||||
|
||||
@@ -105,12 +96,18 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<String> getTabNames() {
|
||||
return StreamEx.of(myRefresher.getLogWindows())
|
||||
.select(VcsLogTab.class)
|
||||
.map(VcsLogTab::getTabName)
|
||||
.toSet();
|
||||
public void closeLogTabs() {
|
||||
if (myToolWindow != null) {
|
||||
VcsLogContentUtil.closeLogTabs(myToolWindow, StreamEx.of(myRefresher.getLogWindows())
|
||||
.select(VcsLogTab.class)
|
||||
.map(VcsLogTab::getTabName)
|
||||
.toSet());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
removeListeners();
|
||||
}
|
||||
|
||||
public class VcsLogTab extends PostponableLogRefresher.VcsLogWindow {
|
||||
@@ -179,7 +176,8 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
if (myToolWindow == null) return;
|
||||
if (myToolWindowManager.getToolWindow(TOOLWINDOW_ID) == null) {
|
||||
removeListeners();
|
||||
} else if (myIsVisible != myToolWindow.isVisible()) {
|
||||
}
|
||||
else if (myIsVisible != myToolWindow.isVisible()) {
|
||||
myIsVisible = myToolWindow.isVisible();
|
||||
selectionChanged();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user