Fixed eventGetCurrentTarget() on IE.
Issue: 1512
Patch by: jgw
Review by: knorton (desk check)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1331 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java b/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
index b1bdd53..d639535 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
@@ -24,6 +24,8 @@
*/
class DOMImplIE6 extends DOMImpl {
+ private static Element currentEventTarget;
+
private static native int getBodyClientLeft() /*-{
// Standard mode uses $doc.documentElement.clientLeft
// Quirks mode uses $doc.body.clientLeft
@@ -70,6 +72,10 @@
@com.google.gwt.user.client.impl.DOMImplIE6::getBodyClientTop()();
}-*/;
+ public native Element eventGetCurrentTarget(Event evt) /*-{
+ return @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget;
+ }-*/;
+
public native Element eventGetFromElement(Event evt) /*-{
return evt.fromElement ? evt.fromElement : null;
}-*/;
@@ -171,10 +177,19 @@
// Set up event dispatchers.
$wnd.__dispatchEvent = function() {
+ // IE doesn't define event.currentTarget, so we squirrel it away here. It
+ // also seems that IE won't allow you to add expandos to the event object,
+ // so we have to store it in a global. This is ok because only one event
+ // can actually be dispatched at a time.
+ var oldEventTarget = @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget;
+ @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget = this;
+
if ($wnd.event.returnValue == null) {
$wnd.event.returnValue = true;
- if (!@com.google.gwt.user.client.DOM::previewEvent(Lcom/google/gwt/user/client/Event;)($wnd.event))
+ if (!@com.google.gwt.user.client.DOM::previewEvent(Lcom/google/gwt/user/client/Event;)($wnd.event)) {
+ @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget = oldEventTarget;
return;
+ }
}
var listener, curElem = this;
@@ -183,6 +198,8 @@
if (listener)
@com.google.gwt.user.client.DOM::dispatchEvent(Lcom/google/gwt/user/client/Event;Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/EventListener;)($wnd.event, curElem, listener);
+
+ @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget = oldEventTarget;
};
$wnd.__dispatchDblClickEvent = function() {