Fix for Firefox 3.5 relatedTarget bug (https://bugzilla.mozilla.org/show_bug.cgi?id=497780)
Review: http://gwt-code-reviews.appspot.com/49803
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5641 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/dom/client/DOMImplMozilla.java b/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
index fd2cb70..c3cf941 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
@@ -37,6 +37,20 @@
}-*/;
@Override
+ public native EventTarget eventGetRelatedTarget(NativeEvent evt) /*-{
+ // Hack around Mozilla bug 497780 (relatedTarget sometimes returns XUL
+ // elements). Trying to access relatedTarget.nodeName will throw an
+ // exception if it's a XUL element.
+ var relatedTarget = evt.relatedTarget;
+ try {
+ var nodeName = relatedTarget.nodeName;
+ return relatedTarget;
+ } catch (e) {
+ return null;
+ }
+ }-*/;
+
+ @Override
public int getAbsoluteLeft(Element elem) {
return getAbsoluteLeftImpl(elem.getOwnerDocument().getViewportElement(),
elem);
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
index 3fa1553..3c87af4 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
@@ -39,22 +39,30 @@
private static JavaScriptObject dispatchEvent;
@Override
- public native Element eventGetFromElement(Event evt) /*-{
- if (evt.type == "mouseover")
- return evt.relatedTarget;
- if (evt.type == "mouseout")
- return evt.target;
+ public Element eventGetFromElement(Event evt) {
+ if (evt.getType().equals("mouseover")) {
+ return evt.getRelatedTarget().cast();
+ }
+
+ if (evt.getType().equals("mouseout")) {
+ return evt.getTarget().cast();
+ }
+
return null;
- }-*/;
+ }
@Override
- public native Element eventGetToElement(Event evt) /*-{
- if (evt.type == "mouseover")
- return evt.target;
- if (evt.type == "mouseout")
- return evt.relatedTarget;
+ public Element eventGetToElement(Event evt) {
+ if (evt.getType().equals("mouseover")) {
+ return evt.getTarget().cast();
+ }
+
+ if (evt.getType().equals("mouseout")) {
+ return evt.getRelatedTarget().cast();
+ }
+
return null;
- }-*/;
+ }
@Override
public native Element getChild(Element elem, int index) /*-{