summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
diff options
context:
space:
mode:
authorGrant Gayed <grant_gayed@ca.ibm.com>2011-11-08 09:59:55 -0500
committerGrant Gayed <grant_gayed@ca.ibm.com>2011-11-08 10:00:30 -0500
commit18076bd75b351c7ad4e30e5b488ce8c903e3ce53 (patch)
treeeafa6af76f2bc848231ebbafdcb3f29a291e5091 /bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
parent81705e679e0cec56416b7c6a3f33afab63230df0 (diff)
downloadeclipse.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.java25
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;