From d3fb6b4758f8a4ea72f9ed4fc1c6f586cef0ece2 Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Tue, 8 Dec 2020 15:59:00 -0500 Subject: [PATCH] GP-462 break memory pinning of closed tool --- .../src/main/java/docking/DockingWindowManager.java | 4 ++++ .../Docking/src/main/java/docking/StatusBar.java | 2 +- .../java/ghidra/framework/plugintool/PluginTool.java | 2 +- .../framework/plugintool/mgr/EventManager.java | 12 ++++++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java b/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java index f474ffb627..7ea61f3438 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java @@ -654,6 +654,9 @@ public class DockingWindowManager implements PropertyChangeListener, Placeholder * @param provider the provider to be removed. */ public void removeComponent(ComponentProvider provider) { + if (provider == defaultProvider) { + defaultProvider = null; + } placeholderManager.removeComponent(provider); } @@ -822,6 +825,7 @@ public class DockingWindowManager implements PropertyChangeListener, Placeholder setNextFocusPlaceholder(null); removeInstance(this); root = null; + lastActiveWindow = null; } void showComponent(ComponentProvider provider, boolean visibleState, boolean shouldEmphasize) { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java b/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java index d743a87ff3..1089a04623 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/StatusBar.java @@ -369,7 +369,7 @@ public class StatusBar extends JPanel { } } - class StatusPanel extends JPanel { + static class StatusPanel extends JPanel { Dimension prefSize; StatusPanel(Component c, boolean addBorder) { diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java index 039035a1ba..a53fd7c263 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java @@ -449,7 +449,7 @@ public abstract class PluginTool extends AbstractDockingTool { } winMgr.setVisible(false); - eventMgr.clearLastEvents(); + eventMgr.clear(); pluginMgr.dispose(); toolActions.removeActions(ToolConstants.TOOL_OWNER); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/mgr/EventManager.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/mgr/EventManager.java index 62c68e9aac..c4b53e9c1e 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/mgr/EventManager.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/mgr/EventManager.java @@ -236,6 +236,18 @@ public class EventManager { lastEventsByType.clear(); } + /** + * Clear last plugin events fired, current event, listeners, etc. + */ + public void clear() { + allEventListeners.clear(); + toolListeners.clear(); + currentEvent = null; + lastEventsByType.clear(); + listenersByEventType.clear(); + eventQ.clear(); + } + /** * Return an array of the last plugin events fired. EventManager maps the event class to the * last event fired.