Revision: 8750
Author: [email protected]
Date: Fri Sep 10 07:37:39 2010
Log: Resubmitting r8722, which was a continuation of r8542, with changes to
the way Image is tested in DoubleClickEventSinkTest.
Fixes double click where it was broken and adds tests to ensure that events
are sunk.
Fix double click in the following widgets (and their subclasses):
- com/google/gwt/user/client/ui/FocusWidget.java
- com/google/gwt/user/client/ui/HTMLTable.java
- com/google/gwt/user/client/ui/Image.java
- com/google/gwt/user/client/ui/Label.java
Undo the addition of double click support to Hyperlink, since it is
provided by Anchor:
- com/google/gwt/user/client/ui/Hyperlink.java
Note that r8542 never actually added double click support for:
- com/google/gwt/user/client/ui/TabBar.java
Note also that double click support was indeed correctly added in r8542 for:
- com/google/gwt/user/client/ui/FocusPanel.java
Review at http://gwt-code-reviews.appspot.com/774801
Fixes issues: 5212
Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=8750
Modified:
/trunk/user/src/com/google/gwt/user/client/ui/FocusWidget.java
/trunk/user/src/com/google/gwt/user/client/ui/HTMLTable.java
/trunk/user/src/com/google/gwt/user/client/ui/Hyperlink.java
/trunk/user/src/com/google/gwt/user/client/ui/Image.java
/trunk/user/src/com/google/gwt/user/client/ui/Label.java
/trunk/user/test/com/google/gwt/user/UISuite.java
/trunk/user/test/com/google/gwt/user/client/DoubleClickEventSinkTest.java
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/FocusWidget.java Tue Sep
7 14:01:53 2010
+++ /trunk/user/src/com/google/gwt/user/client/ui/FocusWidget.java Fri Sep
10 07:37:39 2010
@@ -104,7 +104,7 @@
}
public HandlerRegistration addDoubleClickHandler(DoubleClickHandler
handler) {
- return addHandler(handler, DoubleClickEvent.getType());
+ return addDomHandler(handler, DoubleClickEvent.getType());
}
public HandlerRegistration addFocusHandler(FocusHandler handler) {
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/HTMLTable.java Fri Sep 10
05:47:32 2010
+++ /trunk/user/src/com/google/gwt/user/client/ui/HTMLTable.java Fri Sep 10
07:37:39 2010
@@ -725,7 +725,7 @@
}
public HandlerRegistration addDoubleClickHandler(DoubleClickHandler
handler) {
- return addHandler(handler, DoubleClickEvent.getType());
+ return addDomHandler(handler, DoubleClickEvent.getType());
}
/**
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/Hyperlink.java Fri Sep 10
05:47:32 2010
+++ /trunk/user/src/com/google/gwt/user/client/ui/Hyperlink.java Fri Sep 10
07:37:39 2010
@@ -18,10 +18,7 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.DoubleClickEvent;
-import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
-import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
@@ -63,7 +60,7 @@
*/
@SuppressWarnings("deprecation")
public class Hyperlink extends Widget implements HasHTML,
SourcesClickEvents,
- HasClickHandlers, HasDoubleClickHandlers {
+ HasClickHandlers {
private static HyperlinkImpl impl = GWT.create(HyperlinkImpl.class);
@@ -140,10 +137,6 @@
public void addClickListener(ClickListener listener) {
ListenerWrapper.WrappedClickListener.add(this, listener);
}
-
- public HandlerRegistration addDoubleClickHandler(DoubleClickHandler
handler) {
- return addHandler(handler, DoubleClickEvent.getType());
- }
public String getHTML() {
return DOM.getInnerHTML(anchorElem);
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/Image.java Tue Sep 7
14:01:53 2010
+++ /trunk/user/src/com/google/gwt/user/client/ui/Image.java Fri Sep 10
07:37:39 2010
@@ -125,7 +125,7 @@
image.replaceElement(impl.createStructure(url, left, top, width,
height));
// Todo(ecc) This is wrong, we should not be sinking these here on
such a
// common widget.After the branch is stable, this should be fixed.
- image.sinkEvents(Event.ONCLICK | Event.MOUSEEVENTS |
Event.ONMOUSEWHEEL
+ image.sinkEvents(Event.ONCLICK | Event.ONDBLCLICK |
Event.MOUSEEVENTS | Event.ONMOUSEWHEEL
| Event.ONLOAD);
}
@@ -282,7 +282,7 @@
UnclippedState(Element element) {
// This case is relatively unusual, in that we swapped a clipped
image
// out, so does not need to be efficient.
- Event.sinkEvents(element, Event.ONCLICK | Event.MOUSEEVENTS
+ Event.sinkEvents(element, Event.ONCLICK | Event.ONDBLCLICK |
Event.MOUSEEVENTS
| Event.ONLOAD | Event.ONERROR | Event.ONMOUSEWHEEL);
}
@@ -294,7 +294,7 @@
Event.sinkEvents(image.getElement(), Event.ONLOAD);
// Todo(ecc) this could be more efficient overall.
- image.sinkEvents(Event.ONCLICK | Event.MOUSEEVENTS | Event.ONLOAD
+ image.sinkEvents(Event.ONCLICK | Event.ONDBLCLICK |
Event.MOUSEEVENTS | Event.ONLOAD
| Event.ONERROR | Event.ONMOUSEWHEEL);
}
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/Label.java Fri Sep 10
05:47:32 2010
+++ /trunk/user/src/com/google/gwt/user/client/ui/Label.java Fri Sep 10
07:37:39 2010
@@ -216,7 +216,7 @@
}
public HandlerRegistration addDoubleClickHandler(DoubleClickHandler
handler) {
- return addHandler(handler, DoubleClickEvent.getType());
+ return addDomHandler(handler, DoubleClickEvent.getType());
}
public HandlerRegistration addMouseDownHandler(MouseDownHandler handler)
{
=======================================
--- /trunk/user/test/com/google/gwt/user/UISuite.java Fri Sep 10 05:47:32
2010
+++ /trunk/user/test/com/google/gwt/user/UISuite.java Fri Sep 10 07:37:39
2010
@@ -20,6 +20,7 @@
import com.google.gwt.user.client.AsyncProxyTest;
import com.google.gwt.user.client.CommandExecutorTest;
import com.google.gwt.user.client.CookieTest;
+import com.google.gwt.user.client.DoubleClickEventSinkTest;
import com.google.gwt.user.client.EventTest;
import com.google.gwt.user.client.HistoryDisabledTest;
import com.google.gwt.user.client.WindowTest;
@@ -141,6 +142,7 @@
suite.addTestSuite(DockLayoutPanelRtlTest.class);
suite.addTestSuite(DockLayoutPanelTest.class);
suite.addTestSuite(DockPanelTest.class);
+ suite.addTestSuite(DoubleClickEventSinkTest.class);
suite.addTestSuite(DOMTest.class);
suite.addTestSuite(DOMRtlTest.class);
suite.addTestSuite(ElementWrappingTest.class);
=======================================
---
/trunk/user/test/com/google/gwt/user/client/DoubleClickEventSinkTest.java
Tue Sep 7 09:47:45 2010
+++
/trunk/user/test/com/google/gwt/user/client/DoubleClickEventSinkTest.java
Fri Sep 10 07:37:39 2010
@@ -43,11 +43,6 @@
*/
public class DoubleClickEventSinkTest extends GWTTestCase {
- private DoubleClickHandler dummyDoubleClickHandler = new
DoubleClickHandler() {
- public void onDoubleClick(DoubleClickEvent event) {
- }
- };
-
@Override
public String getModuleName() {
return "com.google.gwt.user.User";
@@ -56,16 +51,20 @@
public void testDoubleClickBitFieldNotTriviallyZero() {
assertNotSame(0, Event.ONDBLCLICK);
}
-
+
+ public void testFocusPanelDoubleClickEventSinkByAddingHandler() {
+ verifyEventSinkOnAddHandler(new FocusPanel(), false);
+ }
+
public void testFocusWidgetDoubleClickEventSinkByAddingHandler() {
verifyEventSinkOnAddHandler(new Anchor(), false);
verifyEventSinkOnAddHandler(new Button(), false);
-
+
CheckBox checkBox = new CheckBox();
// Get the inputElem on which events are sunk
Element e = (Element) checkBox.getElement().getFirstChildElement();
verifyEventSinkOnAddHandler(checkBox, e, false);
-
+
verifyEventSinkOnAddHandler(new ToggleButton(), false);
verifyEventSinkOnAddHandler(new ListBox(), false);
verifyEventSinkOnAddHandler(new RichTextArea(), false);
@@ -74,10 +73,6 @@
verifyEventSinkOnAddHandler(new TextBox(), false);
verifyEventSinkOnAddHandler(new SimpleRadioButton("foo"), false);
}
-
- public void testFocusPanelDoubleClickEventSinkByAddingHandler() {
- verifyEventSinkOnAddHandler(new FocusPanel(), false);
- }
public void testHTMLTableDoubleClickEventSinkByAddingHandler() {
verifyEventSinkOnAddHandler(new Grid(), false);
@@ -85,7 +80,12 @@
}
public void testImageDoubleClickEventSinkByAddingHandler() {
- // allow Image to sink events early
+ /*
+ * The Image widget currently sinks events too early, before handlers
are
+ * attached. We verify that (broken) behavior in this test.
+ * TODO(fredsa) Once Image has been fixed to lazily sink events, update
+ * this test and remove verifyEventSinkOnAddHandler's second parameter.
+ */
verifyEventSinkOnAddHandler(new Image(), true);
}
@@ -93,25 +93,38 @@
verifyEventSinkOnAddHandler(new Label(), false);
}
- private <W extends Widget & HasDoubleClickHandlers> void
verifyEventSinkOnAddHandler(
- W w, boolean allowEarlySink) {
+ private boolean isDoubleClickEventSunk(Element e) {
+ return (DOM.getEventsSunk(e) & Event.ONDBLCLICK) != 0;
+ }
+
+ private <W extends Widget & HasDoubleClickHandlers>
+ void verifyEventSinkOnAddHandler(W w, boolean allowEarlySink) {
verifyEventSinkOnAddHandler(w, w.getElement(), allowEarlySink);
}
- private <W extends Widget & HasDoubleClickHandlers> void
verifyEventSinkOnAddHandler(
- W w, Element e, boolean allowEarlySink) {
+ private <W extends Widget & HasDoubleClickHandlers>
+ void verifyEventSinkOnAddHandler(W w, Element e, boolean
widgetSinksEventsOnAttach) {
RootPanel.get().add(w);
- if (!allowEarlySink) {
- assertEquals("Event should not be sunk on " + w.getClass().getName()
+ " until a "
- + DoubleClickEvent.getType().getName() + " handler has been
added",
- 0, DOM.getEventsSunk(e) & Event.ONDBLCLICK);
+ if (widgetSinksEventsOnAttach) {
+ assertTrue("Event should have been sunk on " + w.getClass().getName()
+ + " once the widget has been attached",
isDoubleClickEventSunk(e));
+ } else {
+ assertFalse(
+ "Event should not be sunk on " + w.getClass().getName() + "
until a "
+ + DoubleClickEvent.getType().getName()
+ + " handler has been added", isDoubleClickEventSunk(e));
}
- w.addDoubleClickHandler(dummyDoubleClickHandler);
-
- assertEquals("Event should have been sunk on " + w.getClass().getName()
- + " once the widget has been attached and a " +
DoubleClickEvent.getType().getName()
- + " handler has been added", Event.ONDBLCLICK,
DOM.getEventsSunk(e) & Event.ONDBLCLICK);
+ w.addDoubleClickHandler(new DoubleClickHandler() {
+ public void onDoubleClick(DoubleClickEvent event) {
+ }
+ });
+
+ assertTrue(
+ "Event should have been sunk on " + w.getClass().getName()
+ + " once the widget has been attached and a "
+ + DoubleClickEvent.getType().getName() + " handler has been
added",
+ isDoubleClickEventSunk(e));
}
}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors