aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>2013-11-26 10:06:17 +0100
committerManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>2013-11-26 10:06:17 +0100
commit48f302ff3cf9f5372c40d160734cb81c2bc33df0 (patch)
tree266bfb993c2531e569de0016b3015c9796e6282c
parent2c0fbe5febef04ae56124281718789dd7dee7d9c (diff)
downloadgwtquery-48f302ff3cf9f5372c40d160734cb81c2bc33df0.tar.gz
gwtquery-48f302ff3cf9f5372c40d160734cb81c2bc33df0.zip
Test for bitless rebinding when a widget is attached/dettatched
-rw-r--r--gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java19
-rw-r--r--gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java8
2 files changed, 20 insertions, 7 deletions
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java
index eacc9d18..b8e73ae1 100644
--- a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java
+++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java
@@ -31,7 +31,6 @@ import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
@@ -400,13 +399,15 @@ public class EventsListener implements EventListener {
return ret != null ? ret : new EventsListener(e);
}
+ /**
+ * We have to set the gQuery event listener to the element again when
+ * the element is a widget, because when GWT detaches a widget it removes the
+ * event listener.
+ */
public static void rebind(Element e) {
EventsListener ret = getGQueryEventListener(e);
- if (ret != null && ret.eventBits != 0) {
- // rebind bit event
- ret.sink(ret.eventBits, null);
-
- // TODO manage bitless event
+ if (ret != null) {
+ DOM.setEventListener((com.google.gwt.user.client.Element) e, ret);
}
}
@@ -427,7 +428,11 @@ public class EventsListener implements EventListener {
private static native void init(Element elem, EventsListener gqevent)/*-{
elem.__gwtlistener = @com.google.gwt.user.client.DOM::getEventListener(*)(elem);
- elem.__gqueryevent = gqevent;
+ elem.__gqueryevent = gqevent;
+ // Someone has reported that in IE the init can be called multiple times
+ // causing a loop. We need some test to demonstrate this behaviour though.
+ // Anyway we check this condition to avoid looping
+ if (elem.__gwtlistener == gqevent) elem.__gwtlistener = null;
}-*/;
// Gwt does't handle submit nor resize events in DOM.sinkEvents
diff --git a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java
index b13b3b4e..6795a35d 100644
--- a/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java
+++ b/gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java
@@ -1288,6 +1288,7 @@ public class GQueryEventsTestGwt extends GWTTestCase {
b.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
b.getElement().getStyle().setBackgroundColor("black");
+ b.setWidth("100px");
}
});
RootPanel.get().add(b);
@@ -1296,6 +1297,9 @@ public class GQueryEventsTestGwt extends GWTTestCase {
$(b).click();
assertEquals("red", $("button").css("color", false));
assertEquals("black", $("button").css("background-color", false));
+ assertEquals("100px", $("button").css("width", false));
+
+ $(b).bind("custom", lazy().css("width", "200px").done());
RootPanel.get().remove(b);
$(e).append($(b));
@@ -1303,6 +1307,10 @@ public class GQueryEventsTestGwt extends GWTTestCase {
$(b).click();
assertEquals("red", $("button").css("color", false));
assertEquals("black", $("button").css("background-color", false));
+ assertEquals("100px", $("button").css("width", false));
+
+ $(b).trigger("custom");
+ assertEquals("200px", $("button").css("width", false));
}
public void testIssue152() {