diff options
author | Manuel Carrasco Moñino <manuel.carrasco.m@gmail.com> | 2013-11-26 10:06:17 +0100 |
---|---|---|
committer | Manuel Carrasco Moñino <manuel.carrasco.m@gmail.com> | 2013-11-26 10:06:17 +0100 |
commit | 48f302ff3cf9f5372c40d160734cb81c2bc33df0 (patch) | |
tree | 266bfb993c2531e569de0016b3015c9796e6282c | |
parent | 2c0fbe5febef04ae56124281718789dd7dee7d9c (diff) | |
download | gwtquery-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.java | 19 | ||||
-rw-r--r-- | gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java | 8 |
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() { |