[tabs] PanelWithActionsAndCloseButton uses proper close method that disposes individu...
authorJulia Beliaeva <Julia.Beliaeva@jetbrains.com>
Fri, 29 Apr 2016 12:49:26 +0000 (15:49 +0300)
committerJulia Beliaeva <Julia.Beliaeva@jetbrains.com>
Tue, 3 May 2016 16:39:20 +0000 (19:39 +0300)
platform/platform-api/src/com/intellij/openapi/ui/PanelWithActionsAndCloseButton.java
platform/platform-api/src/com/intellij/util/ContentsUtil.java
platform/platform-impl/src/com/intellij/util/ContentUtilEx.java
platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java
platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CloseLogTabAction.java

index b20cb742870d36ea53422d71bd526ba2208d62d5..3108bd4397e3af8aa0de74eeeee7e37631a590e7 100644 (file)
@@ -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();
index 8b7f52f29913af6a662bf3b2760726e07eb385ee..0595becc14eb4dff6d7f35058bffd21fa08a7c88 100644 (file)
  */
 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);
+    }
+  }
 }
index 3f3ad3e5d6cb9385e2728eef5d7872cd115579ed..ee74ac95e008128a0c88d8e85dd5f2debd5a18ae 100644 (file)
@@ -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;
index 0aeace69e937bb661417f9312ddab17428fb6973..0b05ca16fd21d95ea4d195870df7473dcc3621ed 100644 (file)
@@ -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);
       }
     }
   }
index c29edb7c7287a5dcddae8f35ef444e8f6232ba0a..ef0675ab2d127c649a0d2149b7d791d22e629b50 100644 (file)
@@ -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);
     }
   }