diff options
author | Grant Gayed <grant_gayed@ca.ibm.com> | 2011-11-08 09:59:55 -0500 |
---|---|---|
committer | Grant Gayed <grant_gayed@ca.ibm.com> | 2011-11-08 10:00:30 -0500 |
commit | 18076bd75b351c7ad4e30e5b488ce8c903e3ce53 (patch) | |
tree | eafa6af76f2bc848231ebbafdcb3f29a291e5091 /bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java | |
parent | 81705e679e0cec56416b7c6a3f33afab63230df0 (diff) | |
download | eclipse.platform.swt-18076bd75b351c7ad4e30e5b488ce8c903e3ce53.tar.gz eclipse.platform.swt-18076bd75b351c7ad4e30e5b488ce8c903e3ce53.tar.xz eclipse.platform.swt-18076bd75b351c7ad4e30e5b488ce8c903e3ce53.zip |
Bug 363084 - [Browser] NPE can occur when closing Browser in detached
view
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java index d5de1b3c1d..230aacb629 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java @@ -19,6 +19,7 @@ import org.eclipse.swt.widgets.*; class MozillaDelegate { Browser browser; + Shell eventShell; int /*long*/ mozillaHandle, embedHandle; boolean hasFocus; Listener listener; @@ -138,15 +139,21 @@ void handleFocus () { listener = new Listener () { public void handleEvent (Event event) { if (event.widget == browser) return; - ((Mozilla)browser.webBrowser).Deactivate (); - hasFocus = false; - browser.getDisplay ().removeFilter (SWT.FocusIn, this); - browser.getShell ().removeListener (SWT.Deactivate, this); + if (event.type != SWT.Dispose) { + ((Mozilla)browser.webBrowser).Deactivate (); + hasFocus = false; + } + eventShell.getDisplay ().removeFilter (SWT.FocusIn, this); + eventShell.removeListener (SWT.Deactivate, this); + eventShell.removeListener (SWT.Dispose, this); + eventShell = null; listener = null; } }; - browser.getDisplay ().addFilter (SWT.FocusIn, listener); - browser.getShell ().addListener (SWT.Deactivate, listener); + eventShell = browser.getShell (); + eventShell.getDisplay ().addFilter (SWT.FocusIn, listener); + eventShell.addListener (SWT.Deactivate, listener); + eventShell.addListener (SWT.Dispose, listener); } void handleMouseDown () { @@ -211,8 +218,10 @@ boolean needsSpinup () { void onDispose (int /*long*/ embedHandle) { if (listener != null) { - browser.getDisplay ().removeFilter (SWT.FocusIn, listener); - browser.getShell ().removeListener (SWT.Deactivate, listener); + eventShell.getDisplay ().removeFilter (SWT.FocusIn, listener); + eventShell.removeListener (SWT.Deactivate, listener); + eventShell.removeListener (SWT.Dispose, listener); + eventShell = null; listener = null; } browser = null; |