diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentI.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentI.java index 85940789e8f1..b2673bc9b4db 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentI.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentI.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.Nullable; */ public interface ChangesViewContentI { void setUp(ToolWindow toolWindow); + boolean isAvailable(); void addContent(Content content); void removeContent(final Content content); void setSelectedContent(final Content content); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java index 73592bf14785..97693e21d81c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java @@ -24,8 +24,8 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; -import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.ProjectLevelVcsManager; +import com.intellij.openapi.vcs.VcsDirectoryMapping; import com.intellij.openapi.vcs.VcsListener; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; @@ -65,6 +65,7 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen super(project); myVcsManager = vcsManager; myVcsChangeAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, project); + myProject.getMessageBus().connect().subscribe(ProjectLevelVcsManager.VCS_CONFIGURATION_CHANGED, myVcsListener); } public void setUp(ToolWindow toolWindow) { @@ -73,13 +74,9 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen myContentManagerListener = new MyContentManagerListener(); contentManager.addContentManagerListener(myContentManagerListener); - myVcsManager.addVcsListener(myVcsListener); - Disposer.register(myProject, new Disposable(){ public void dispose() { contentManager.removeContentManagerListener(myContentManagerListener); - - myVcsManager.removeVcsListener(myVcsListener); } }); @@ -146,11 +143,15 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen } private void updateToolWindowAvailability() { - final AbstractVcs[] abstractVcses = myVcsManager.getAllActiveVcss(); ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(TOOLWINDOW_ID); - toolWindow.setAvailable(abstractVcses.length > 0, null); + toolWindow.setAvailable(isAvailable(), null); } - + + public boolean isAvailable() { + final List mappings = myVcsManager.getDirectoryMappings(); + return !mappings.isEmpty() && !mappings.get(0).isDefaultMapping() && mappings.get(0).getVcs() != null; + } + public void projectClosed() { myVcsChangeAlarm.cancelAllRequests(); } @@ -216,7 +217,9 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen public void run() { if (myProject.isDisposed()) return; updateToolWindowAvailability(); - updateExtensionTabs(); + if (myContentManager != null) { + updateExtensionTabs(); + } } }, 100, ModalityState.NON_MODAL); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewToolWindowFactory.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewToolWindowFactory.java index 74713e21ca51..f1bc2b742e87 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewToolWindowFactory.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewToolWindowFactory.java @@ -17,6 +17,7 @@ package com.intellij.openapi.vcs.changes.ui; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowFactory; import org.jetbrains.annotations.NotNull; @@ -24,9 +25,14 @@ import org.jetbrains.annotations.NotNull; /** * @author Dmitry Avdeev */ -public class ChangesViewToolWindowFactory implements ToolWindowFactory, DumbAware { +public class ChangesViewToolWindowFactory implements ToolWindowFactory, DumbAware, Condition { @Override public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { ChangesViewContentManager.getInstance(project).setUp(toolWindow); } + + @Override + public boolean value(Project project) { + return ChangesViewContentManager.getInstance(project).isAvailable(); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/DummyChangesViewContentManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/DummyChangesViewContentManager.java index 41f2f564a44c..b27dd1909b6b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/DummyChangesViewContentManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/DummyChangesViewContentManager.java @@ -27,6 +27,11 @@ public class DummyChangesViewContentManager implements ChangesViewContentI { } + @Override + public boolean isAvailable() { + return false; + } + @Override public void addContent(final Content content) { }