Add the ability to change the default HandlerManager of a Widget.
http://gwt-code-reviews.appspot.com/138801
Patch by: sven.brunken
Review by: jlabanca
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7589 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/Widget.java b/user/src/com/google/gwt/user/client/ui/Widget.java
index 147c8be..735bbd5 100644
--- a/user/src/com/google/gwt/user/client/ui/Widget.java
+++ b/user/src/com/google/gwt/user/client/ui/Widget.java
@@ -43,9 +43,9 @@
*/
int eventsToSink;
private boolean attached;
+ private HandlerManager handlerManager;
private Object layoutData;
private Widget parent;
- private HandlerManager handlerManager;
public void fireEvent(GwtEvent<?> event) {
if (handlerManager != null) {
@@ -199,6 +199,16 @@
}
/**
+ * Creates the {@link HandlerManager} used by this Widget. You can overwrite
+ * this method to create a custom {@link HandlerManager}.
+ *
+ * @return the {@link HandlerManager} you want to use
+ */
+ protected HandlerManager createHandlerManager() {
+ return new HandlerManager(this);
+ }
+
+ /**
* Fires an event on a child widget. Used to delegate the handling of an event
* from one widget to another.
*
@@ -359,7 +369,7 @@
* @return the handler manager
* */
HandlerManager ensureHandlers() {
- return handlerManager == null ? handlerManager = new HandlerManager(this)
+ return handlerManager == null ? handlerManager = createHandlerManager()
: handlerManager;
}
diff --git a/user/test/com/google/gwt/user/client/ui/WidgetTest.java b/user/test/com/google/gwt/user/client/ui/WidgetTest.java
index 4231ba3..63c1db6 100644
--- a/user/test/com/google/gwt/user/client/ui/WidgetTest.java
+++ b/user/test/com/google/gwt/user/client/ui/WidgetTest.java
@@ -18,6 +18,7 @@
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.junit.client.GWTTestCase;
@@ -44,6 +45,18 @@
return "com.google.gwt.user.User";
}
+ public void testCreateHandlerManager() {
+ final HandlerManager manager = new HandlerManager(null);
+ Widget w = new Widget() {
+ @Override
+ protected HandlerManager createHandlerManager() {
+ return manager;
+ }
+ };
+ w.ensureHandlers();
+ assertEquals(manager, w.getHandlerManager());
+ }
+
public void testHandlerCount() {
Widget a = new Widget();
assertEquals(0, a.getHandlerCount(ClickEvent.getType()));