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) /*-{