diff --git a/platform/platform-api/src/com/intellij/openapi/ui/PanelWithActionsAndCloseButton.java b/platform/platform-api/src/com/intellij/openapi/ui/PanelWithActionsAndCloseButton.java index b20cb742870d..3108bd4397e3 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/PanelWithActionsAndCloseButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/PanelWithActionsAndCloseButton.java @@ -18,6 +18,7 @@ package com.intellij.openapi.ui; import com.intellij.ide.actions.CloseTabToolbarAction; import com.intellij.openapi.actionSystem.*; import com.intellij.ui.content.*; +import com.intellij.util.ContentsUtil; import org.jetbrains.annotations.NonNls; import javax.swing.*; @@ -108,6 +109,7 @@ public abstract class PanelWithActionsAndCloseButton extends JPanel implements D if (myContentManager != null) { Content content = myContentManager.getContent(PanelWithActionsAndCloseButton.this); if (content != null) { + ContentsUtil.closeContentTab(myContentManager, content); if (content instanceof TabbedContent && ((TabbedContent)content).getTabs().size() > 1) { final TabbedContent tabbedContent = (TabbedContent)content; final JComponent component = content.getComponent(); diff --git a/platform/platform-api/src/com/intellij/util/ContentsUtil.java b/platform/platform-api/src/com/intellij/util/ContentsUtil.java index 8b7f52f29913..0595becc14eb 100644 --- a/platform/platform-api/src/com/intellij/util/ContentsUtil.java +++ b/platform/platform-api/src/com/intellij/util/ContentsUtil.java @@ -15,10 +15,18 @@ */ package com.intellij.util; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.util.Disposer; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; +import com.intellij.ui.content.TabbedContent; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; public class ContentsUtil { + protected static final String DISPOSABLE_KEY = "TabContentDisposable"; + public static void addOrReplaceContent(ContentManager manager, Content content, boolean select) { final String contentName = content.getDisplayName(); @@ -46,4 +54,25 @@ public class ContentsUtil { manager.setSelectedContent(content); } } + + public static void closeContentTab(@NotNull ContentManager contentManager, @NotNull Content content) { + if (content instanceof TabbedContent) { + TabbedContent tabbedContent = (TabbedContent)content; + if (tabbedContent.getTabs().size() > 1) { + JComponent component = tabbedContent.getComponent(); + tabbedContent.removeContent(component); + contentManager.setSelectedContent(tabbedContent, true, true); + dispose(component); + return; + } + } + contentManager.removeContent(content, true); + } + + private static void dispose(@NotNull JComponent component) { + Object disposable = component.getClientProperty(DISPOSABLE_KEY); + if (disposable instanceof Disposable) { + Disposer.dispose((Disposable)disposable); + } + } } diff --git a/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java b/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java index 3f3ad3e5d6cb..ee74ac95e008 100644 --- a/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java +++ b/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java @@ -35,7 +35,6 @@ import java.util.List; * @author Konstantin Bulenkov */ public class ContentUtilEx extends ContentsUtil { - public static final String DISPOSABLE_KEY = "TabContentDisposable"; public static void addTabbedContent(ContentManager manager, JComponent contentComponent, String groupPrefix, String tabName, boolean select) { addTabbedContent(manager, contentComponent, groupPrefix, tabName, select, null); @@ -119,27 +118,6 @@ public class ContentUtilEx extends ContentsUtil { groupPrefix.equals(content.getUserData(Content.TAB_GROUP_NAME_KEY)); } - public static void closeContentTab(@NotNull ContentManager contentManager, @NotNull Content content) { - if (content instanceof TabbedContent) { - TabbedContent tabbedContent = (TabbedContent)content; - if (tabbedContent.getTabs().size() > 1) { - JComponent component = tabbedContent.getComponent(); - tabbedContent.removeContent(component); - contentManager.setSelectedContent(tabbedContent, true, true); - dispose(component); - return; - } - } - contentManager.removeContent(content, true); - } - - private static void dispose(@NotNull JComponent component) { - Object disposable = component.getClientProperty(DISPOSABLE_KEY); - if (disposable != null && disposable instanceof Disposable) { - Disposer.dispose((Disposable)disposable); - } - } - @NotNull public static String getFullName(@NotNull String groupPrefix, @NotNull String tabName) { return getFullPrefix(groupPrefix) + tabName; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java index 0aeace69e937..0b05ca16fd21 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java @@ -29,6 +29,7 @@ import com.intellij.ui.content.Content; import com.intellij.ui.content.TabbedContent; import com.intellij.ui.content.impl.ContentManagerImpl; import com.intellij.util.ContentUtilEx; +import com.intellij.util.ContentsUtil; import com.intellij.util.NotNullFunction; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBusConnection; @@ -126,7 +127,7 @@ public class VcsLogContentProvider implements ChangesViewContentProvider { for (Content content: toolWindow.getContentManager().getContents()) { if (ContentUtilEx.isContentTab(content, TAB_NAME)) { - ContentUtilEx.closeContentTab(toolWindow.getContentManager(), content); + ContentsUtil.closeContentTab(toolWindow.getContentManager(), content); } } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CloseLogTabAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CloseLogTabAction.java index c29edb7c7287..ef0675ab2d12 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CloseLogTabAction.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CloseLogTabAction.java @@ -24,6 +24,7 @@ import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; import com.intellij.util.ContentUtilEx; +import com.intellij.util.ContentsUtil; import com.intellij.vcs.log.impl.VcsLogContentProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -52,7 +53,7 @@ public class CloseLogTabAction extends CloseTabToolbarAction { if (contentManager == null) return; Content selectedContent = getTabbedContent(contentManager); if (selectedContent != null) { - ContentUtilEx.closeContentTab(contentManager, selectedContent); + ContentsUtil.closeContentTab(contentManager, selectedContent); } }