]> source.dussan.org Git - gwtquery.git/commitdiff
fix ie8 custom event
authorjdramaix <julien.dramaix@gmail.com>
Thu, 28 Nov 2013 23:38:43 +0000 (00:38 +0100)
committerjdramaix <julien.dramaix@gmail.com>
Thu, 28 Nov 2013 23:38:43 +0000 (00:38 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/Query.gwt.xml
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/Events.java

index a902fd99dba30b217dee718c3b03091d2625d869..e12b298eb92369fd44e4a2139b0867061e9ebc86 100644 (file)
         <when-property-is name="user.agent" value="ie6" />
     </replace-with>
 
+    <!-- Event dispatcher -->
+    <replace-with class="com.google.gwt.query.client.plugins.Events.EventDispatcherTrident">
+        <when-type-is class="com.google.gwt.query.client.plugins.Events.EventDispatcher" />
+        <any>
+            <when-property-is name="user.agent" value="ie6" />
+            <when-property-is name="user.agent" value="ie8" />
+        </any>
+    </replace-with>
+
     <!-- IE8 needs the iframe where the js of app is loaded set to standard in order
          to use the queryAll native selector -->
     <define-linker name="stddoctype" class="com.google.gwt.query.linker.IFrameWithDocTypeLinker"/>
index 94d1ab8d02492b928d51da2f501d4b48665e9fdb..897807f9ebb860c86808bd2b8060604b8e6ede43 100644 (file)
@@ -13,6 +13,7 @@
  */
 package com.google.gwt.query.client.plugins;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.FormElement;
 import com.google.gwt.dom.client.NativeEvent;
@@ -36,6 +37,8 @@ public class Events extends GQuery {
     }
   });
 
+  private static final EventDispatcher EVENT_DISPATCHER = GWT.create(EventDispatcher.class);
+
   /**
    * Don't apply events on text and comment nodes !!
    */
@@ -377,7 +380,9 @@ public class Events extends GQuery {
     for (Element e : elements()) {
       if (isEventCapable(e)) {
         $(e).data(EventsListener.EVENT_DATA, datas);
-        e.dispatchEvent(evt);
+
+        EVENT_DISPATCHER.dispatch(e, evt);
+
         if (!JsUtils.isDefaultPrevented(evt)) {
           callHandlers(e, evt, funcs);
         }
@@ -393,4 +398,22 @@ public class Events extends GQuery {
     }
   }
 
+  static class EventDispatcher {
+    public void dispatch(Element e, NativeEvent evt) {
+        e.dispatchEvent(evt);
+    }
+  }
+
+  @SuppressWarnings("unused")
+  static class EventDispatcherTrident extends EventDispatcher {
+    public void dispatch(Element e, NativeEvent evt) {
+      // bitless event ?
+      if (Event.getTypeInt(evt.getType()) != -1) {
+        super.dispatch(e, evt);
+      } else {
+        EventsListener.getInstance(e).dispatchEvent(evt.<Event>cast());
+      }
+    }
+  }
+
 }