mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[tabs] PanelWithActionsAndCloseButton uses proper close method that disposes individual tab
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user