]> source.dussan.org Git - gwtquery.git/commitdiff
fix issue when unbind special events only with namespace
authorjdramaix <julien.dramaix@gmail.com>
Tue, 4 Mar 2014 16:53:43 +0000 (17:53 +0100)
committerjdramaix <julien.dramaix@gmail.com>
Tue, 4 Mar 2014 16:53:43 +0000 (17:53 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java

index 0fbf87427029f6a414d81ea5f6a9aed991d327c8..cf10dcbe8b4c8d65921f2b4ef1152b9dd7327c5d 100644 (file)
@@ -14,6 +14,7 @@
 package com.google.gwt.query.client.plugins.events;
 
 import com.google.gwt.core.client.Duration;
+import com.google.gwt.dev.util.Strings;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.NodeList;
@@ -737,13 +738,12 @@ public class EventsListener implements EventListener {
     for (int i = 0; i < elementEvents.length(); i++) {
       BindFunction listener = elementEvents.get(i);
 
-      boolean matchNS =
-          namespace == null || namespace.isEmpty() || listener.nameSpace.equals(namespace);
+      boolean matchNS = isNullOrEmpty(namespace) || listener.nameSpace.equals(namespace);
       boolean matchEV = eventbits <= 0 || listener.hasEventType(eventbits);
       boolean matchEVN = matchEV || listener.isTypeOf(eventName);
-      boolean matchOEVT =  (originalEventType == null && listener.getOriginalEventType() == null)
-              || (originalEventType != null && originalEventType.equals(listener
-          .getOriginalEventType()));
+      boolean matchOEVT = (isNullOrEmpty(eventName) && !isNullOrEmpty(namespace) && matchNS)
+          || (originalEventType == null && listener.getOriginalEventType() == null)
+          || (originalEventType != null && originalEventType.equals(listener.getOriginalEventType()));
       boolean matchFC = f == null || listener.isEquals(f);
 
       if (matchNS && matchEV && matchEVN && matchFC && matchOEVT) {
@@ -761,6 +761,10 @@ public class EventsListener implements EventListener {
 
   }
 
+  private boolean isNullOrEmpty(String s) {
+    return s == null || s.isEmpty();
+  }
+
   public void unbind(String events, Function f) {
 
     String[] parts = events.split("[\\s,]+");
index 681faa78fa2aa4e31122fdea8b9333cc1962ebbb..31ff1695f3b4b742986cdc8259e7f00afe8766f1 100644 (file)
@@ -1687,4 +1687,27 @@ public class GQueryEventsTestGwt extends GWTTestCase {
     assertEquals(0, mouseOverFunction.invokationCounter);
     assertEquals(0, customEventFunction.invokationCounter);
   }
+
+  public void testUnbindSpecialEventWithNameSpace() {
+    $(e).html("<div id='mainDiv'>blop</div>");
+
+    CounterFunction mouseEnterFunction = new CounterFunction();
+
+    $("#mainDiv", e).on("mouseenter.mynamespace", mouseEnterFunction);
+    $("#mainDiv", e).mouseenter();
+    assertEquals(1, mouseEnterFunction.invokationCounter);
+
+    $("#mainDiv", e).off(".mynamespace");
+    $("#mainDiv", e).mouseenter();
+    assertEquals(1, mouseEnterFunction.invokationCounter);
+
+    $("#mainDiv", e).on("mouseenter.mynamespace", mouseEnterFunction);
+    $("#mainDiv", e).mouseenter();
+    assertEquals(2, mouseEnterFunction.invokationCounter);
+
+    $("#mainDiv", e).off("mouseenter.mynamespace");
+    $("#mainDiv", e).mouseenter();
+    assertEquals(2, mouseEnterFunction.invokationCounter);
+  }
+
 }