]> source.dussan.org Git - gwtquery.git/commitdiff
Fix event bubbling for custom event for IE6-8.
authorjdramaix <julien.dramaix@gmail.com>
Thu, 10 Apr 2014 13:10:55 +0000 (15:10 +0200)
committerjdramaix <julien.dramaix@gmail.com>
Thu, 10 Apr 2014 13:10:55 +0000 (15:10 +0200)
gwtquery-core/pom.xml
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/Events.java
pom.xml

index 31aede2daea16164374c5a8cfa5f9f60c9250671..1ef308f8099a988c53be45f759b9cac192965b1e 100644 (file)
@@ -8,7 +8,7 @@
 
     <artifactId>gwtquery</artifactId>
     <packaging>jar</packaging>
-    <version>1.4.1</version>
+    <version>1.4.2-SNAPSHOT</version>
     <name>Gwt Query Core API</name>
     <url>http://gquery.org</url>
     <dependencies>
index c89cf88462574d1ee1a9831ecaf1178dd4a1299c..70928b02e1fe805e59e339b422b8e3146a0b0771 100644 (file)
@@ -17,7 +17,6 @@ import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.FormElement;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.dom.client.Node;
-import com.google.gwt.event.dom.client.HasNativeEvent;
 import com.google.gwt.query.client.Function;
 import com.google.gwt.query.client.GQuery;
 import com.google.gwt.query.client.js.JsUtils;
@@ -401,7 +400,7 @@ public class Events extends GQuery {
 
         // Ie6-8 don't dispatch bitless event
         if ((browser.ie6 || browser.ie8) && Event.getTypeInt(evt.getType()) == -1) {
-          EventsListener.getInstance(e).dispatchEvent(evt.<Event>cast());
+          bubbleEventForIE(e, evt.<Event>cast());
         } else {
           e.dispatchEvent(evt);
         }
@@ -414,6 +413,25 @@ public class Events extends GQuery {
     }
   }
 
+  private void bubbleEventForIE(Element e, Event event) {
+    if (e == null || "html".equalsIgnoreCase(e.getTagName()) || isEventPropagationStopped(event)) {
+      return;
+    }
+
+    EventsListener.getInstance(e).dispatchEvent(event);
+
+    bubbleEventForIE(e.getParentElement(), event);
+  }
+
+  /**
+   * Only valid for IE6-8
+   * @param event
+   * @return
+   */
+  private native boolean isEventPropagationStopped(Event event)/*-{
+      return !!event.cancelBubble;
+  }-*/;
+
   private void callHandlers(Element e, NativeEvent evt, Function... functions){
     for (Function f : functions) {
       f.setEvent(Event.as(evt));
diff --git a/pom.xml b/pom.xml
index ccf7fc60ace4cfefbb1ba271e486a270172ffde4..c1b358ddb2ed7226707ffe3be882cafbe5a9ea3a 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
     <groupId>com.googlecode.gwtquery</groupId>
     <artifactId>gwtquery-project</artifactId>
     <packaging>pom</packaging>
-    <version>1.4.1</version>
+    <version>1.4.2-SNAPSHOT</version>
     <name>Gwt Query Project</name>
     <url>http://gwtquery.com</url>
     <description>GwtQuery is a jQuery clone written in GWT.</description>