diff --git a/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java b/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java index d7b9289b366d..acec06ed9ac5 100644 --- a/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java +++ b/platform/platform-impl/src/com/intellij/util/ContentUtilEx.java @@ -23,6 +23,7 @@ import com.intellij.ui.content.ContentFactory; import com.intellij.ui.content.ContentManager; import com.intellij.ui.content.TabbedContent; import com.intellij.ui.content.impl.TabbedContentImpl; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -102,7 +103,7 @@ public class ContentUtilEx extends ContentsUtil { } @Nullable - public static TabbedContent findTabbedContent(ContentManager manager, String groupPrefix) { + public static TabbedContent findTabbedContent(@NotNull ContentManager manager, @NotNull String groupPrefix) { TabbedContent tabbedContent = null; for (Content content : manager.getContents()) { if (content instanceof TabbedContent && content.getTabName().startsWith(getFullPrefix(groupPrefix))) { @@ -113,6 +114,24 @@ public class ContentUtilEx extends ContentsUtil { return tabbedContent; } + public static boolean isContentTab(@NotNull Content content, @NotNull String groupPrefix) { + return (content instanceof TabbedContent && content.getTabName().startsWith(getFullPrefix(groupPrefix))) || + 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); + return; + } + } + contentManager.removeContent(content, true); + } + @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/ui/actions/CloseLogTabAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CloseLogTabAction.java index 9c492a7dd966..c29edb7c7287 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 @@ -21,15 +21,13 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; -import com.intellij.ui.content.TabbedContent; import com.intellij.util.ContentUtilEx; import com.intellij.vcs.log.impl.VcsLogContentProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; - public class CloseLogTabAction extends CloseTabToolbarAction { @Override public void update(@NotNull AnActionEvent e) { @@ -52,24 +50,19 @@ public class CloseLogTabAction extends CloseTabToolbarAction { ContentManager contentManager = getContentManager(project); if (contentManager == null) return; - TabbedContent tabbedContent = getTabbedContent(contentManager); - if (tabbedContent == null) return; - - if (tabbedContent.getTabs().size() > 1) { - JComponent component = tabbedContent.getComponent(); - tabbedContent.removeContent(component); - contentManager.setSelectedContent(tabbedContent, true, true); - } - else { - contentManager.removeContent(tabbedContent, true); + Content selectedContent = getTabbedContent(contentManager); + if (selectedContent != null) { + ContentUtilEx.closeContentTab(contentManager, selectedContent); } } @Nullable - private static TabbedContent getTabbedContent(@NotNull ContentManager contentManager) { - TabbedContent tabbedContent = ContentUtilEx.findTabbedContent(contentManager, VcsLogContentProvider.TAB_NAME); - if (tabbedContent != contentManager.getSelectedContent()) return null; - return tabbedContent; + private static Content getTabbedContent(@NotNull ContentManager contentManager) { + Content content = contentManager.getSelectedContent(); + if (content != null) { + if (ContentUtilEx.isContentTab(content, VcsLogContentProvider.TAB_NAME)) return content; + } + return null; } @Nullable