[tabs] PanelWithActionsAndCloseButton uses proper close method that disposes individual tab

This commit is contained in:
Julia Beliaeva
2016-05-03 19:39:20 +03:00
parent 6fd386b142
commit 37d96dfedc
5 changed files with 35 additions and 24 deletions
@@ -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();
@@ -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);
}
}
}
@@ -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;
@@ -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);
}
}
}
@@ -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);
}
}