Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantha Chan2006-07-13 14:59:57 +0000
committerSamantha Chan2006-07-13 14:59:57 +0000
commit5806cbf41b443bc5b4eb245aac4827dd8364c3a5 (patch)
treee6e73c3898a3b49abc807c37d0114741c6856fe3 /org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory
parente3121d81a5138ef255b5418404dd158f0b1681dc (diff)
downloadeclipse.platform.debug-5806cbf41b443bc5b4eb245aac4827dd8364c3a5.tar.gz
eclipse.platform.debug-5806cbf41b443bc5b4eb245aac4827dd8364c3a5.tar.xz
eclipse.platform.debug-5806cbf41b443bc5b4eb245aac4827dd8364c3a5.zip
Bug 148897 - [Memory View] memory renderings leak menu listener
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractMemoryRendering.java24
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java19
2 files changed, 30 insertions, 13 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractMemoryRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractMemoryRendering.java
index 9284c9979..c7b503b78 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractMemoryRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractMemoryRendering.java
@@ -83,6 +83,7 @@ public abstract class AbstractMemoryRendering extends PlatformObject implements
* @since 3.2
*/
private ILabelDecorator fLabelDecorator;
+ private IMenuListener fMenuListener;
/**
* Constructs a new rendering of the given type.
@@ -114,11 +115,19 @@ public abstract class AbstractMemoryRendering extends PlatformObject implements
{
Runnable runnable = new Runnable(){
public void run() {
- ((IMemoryBlockExtension)fMemoryBlock).disconnect(this);
+ ((IMemoryBlockExtension)fMemoryBlock).disconnect(this);
}};
new ConnectionJob(runnable).schedule();
}
+ if (fPopupMenuMgr != null)
+ {
+ fPopupMenuMgr.removeMenuListener(fMenuListener);
+ fPopupMenuMgr.removeAll();
+ fPopupMenuMgr.dispose();
+ fPopupMenuMgr = null;
+ }
+
if (fPropertyListeners != null)
fPropertyListeners = null;
}
@@ -167,7 +176,7 @@ public abstract class AbstractMemoryRendering extends PlatformObject implements
{
Runnable runnable = new Runnable(){
public void run() {
- ((IMemoryBlockExtension)fMemoryBlock).disconnect(this);
+ ((IMemoryBlockExtension)fMemoryBlock).disconnect(this);
}};
new ConnectionJob(runnable).schedule();
}
@@ -329,12 +338,11 @@ public abstract class AbstractMemoryRendering extends PlatformObject implements
ISelectionProvider selProvider = site.getSite().getSelectionProvider();
- // must add additions separator before registering the menu
- // otherwise, we will get an error
- fPopupMenuMgr.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(IMenuManager manager) {
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }});
+ fMenuListener = new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }};
+ fPopupMenuMgr.addMenuListener(fMenuListener);
site.getSite().registerContextMenu(menuId, fPopupMenuMgr, selProvider);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java
index cfcef3771..68969375f 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java
@@ -214,6 +214,8 @@ public abstract class AbstractTableRendering extends AbstractBaseTableRendering
private Shell fToolTipShell;
private FormatTableRenderingAction fFormatRenderingAction;
+
+ private IMenuListener fMenuListener;
private class EventHandleLock
{
@@ -790,11 +792,13 @@ public abstract class AbstractTableRendering extends AbstractBaseTableRendering
createActions();
createPopupMenu(fTableViewer.getControl());
createPopupMenu(fTableCursor);
- getPopupMenuManager().addMenuListener(new IMenuListener() {
- public void menuAboutToShow(IMenuManager manager) {
- fillContextMenu(manager);
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }});
+
+ fMenuListener = new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ fillContextMenu(manager);
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }};
+ getPopupMenuManager().addMenuListener(fMenuListener);
// now the rendering is successfully created
fIsCreated = true;
@@ -2260,6 +2264,11 @@ public abstract class AbstractTableRendering extends AbstractBaseTableRendering
fToolTipShell.dispose();
+ if (getPopupMenuManager() != null)
+ {
+ getPopupMenuManager().removeMenuListener(fMenuListener);
+ }
+
super.dispose();
} catch (Exception e) {}

Back to the top