Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikaël Barbero2012-08-21 16:13:20 +0000
committerMikaël Barbero2012-08-21 16:13:20 +0000
commitbbbc5bbcbad559566982108bed9f87fdbf6b8952 (patch)
treede80fc45b92cbe5281a6a86be5d6f02b67a34fd8
parent21a4f475537f5b6d31fa04c5b4e3fd44b6130445 (diff)
downloadorg.eclipse.emf.compare-bbbc5bbcbad559566982108bed9f87fdbf6b8952.tar.gz
org.eclipse.emf.compare-bbbc5bbcbad559566982108bed9f87fdbf6b8952.tar.xz
org.eclipse.emf.compare-bbbc5bbcbad559566982108bed9f87fdbf6b8952.zip
hook disposal of control to remove listeners
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/AbstractMergeViewer.java13
1 files changed, 12 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/AbstractMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/AbstractMergeViewer.java
index f7ccca0b2..7659cbf26 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/AbstractMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/AbstractMergeViewer.java
@@ -18,6 +18,8 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
@@ -44,15 +46,24 @@ public abstract class AbstractMergeViewer<C extends Composite> implements IMerge
fForwardingSelectionListener = new ForwardingViewerSelectionListener();
fStructuredViewer.addSelectionChangedListener(fForwardingSelectionListener);
+ hookControl(fStructuredViewer.getControl());
}
protected abstract StructuredViewer createStructuredViewer(Composite parent);
+ protected void hookControl(Control control) {
+ control.addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent event) {
+ handleDispose(event);
+ }
+ });
+ }
+
protected StructuredViewer getStructuredViewer() {
return fStructuredViewer;
}
- public void dispose() {
+ protected void handleDispose(DisposeEvent event) {
fStructuredViewer.removeSelectionChangedListener(fForwardingSelectionListener);
}

Back to the top