[vcs-log] close log tab action also works when tabs are in split mode

This commit is contained in:
Julia Beliaeva
2016-05-03 19:32:35 +03:00
parent 2a026cbb9a
commit ab4bf66646
2 changed files with 30 additions and 18 deletions
@@ -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;
@@ -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