diff options
author | Samantha Chan | 2006-07-13 14:59:57 +0000 |
---|---|---|
committer | Samantha Chan | 2006-07-13 14:59:57 +0000 |
commit | 5806cbf41b443bc5b4eb245aac4827dd8364c3a5 (patch) | |
tree | e6e73c3898a3b49abc807c37d0114741c6856fe3 /org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory | |
parent | e3121d81a5138ef255b5418404dd158f0b1681dc (diff) | |
download | eclipse.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.java | 24 | ||||
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java | 19 |
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) {} |