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() {