From da29f7426740179f86ae6535fee240f04899da41 Mon Sep 17 00:00:00 2001 From: Marc Englund Date: Mon, 19 Dec 2011 10:59:57 +0200 Subject: [PATCH] Root now sends click events, fixes #8151 --- .../vaadin/terminal/gwt/client/ui/VView.java | 3 +++ src/com/vaadin/ui/Root.java | 27 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VView.java b/src/com/vaadin/terminal/gwt/client/ui/VView.java index 04ddf8c199..50666e1674 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VView.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VView.java @@ -74,6 +74,9 @@ public class VView extends SimplePanel implements Container, ResizeHandler, private ApplicationConnection connection; + /** Identifies the click event */ + public static final String CLICK_EVENT_ID = "click"; + /** * We are postponing resize process with IE. IE bugs with scrollbars in some * situations, that causes false onWindowResized calls. With Timer we will diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java index 03b7ec1a5f..9e03722288 100644 --- a/src/com/vaadin/ui/Root.java +++ b/src/com/vaadin/ui/Root.java @@ -27,7 +27,7 @@ import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; import com.vaadin.terminal.WrappedRequest; import com.vaadin.terminal.WrappedRequest.BrowserDetails; -import com.vaadin.terminal.gwt.client.ui.VPanel; +import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.ui.VView; import com.vaadin.tools.ReflectTools; import com.vaadin.ui.Window.CloseListener; @@ -280,6 +280,9 @@ public class Root extends AbstractComponentContainer implements private int browserWindowWidth = -1; private int browserWindowHeight = -1; + /** Identifies the click event */ + private static final String CLICK_EVENT_ID = VView.CLICK_EVENT_ID; + /** * Creates a new empty root without a caption. This root will have a * {@link VerticalLayout} with margins enabled as its content. @@ -445,10 +448,27 @@ public class Root extends AbstractComponentContainer implements } } + /** + * Fire a click event to all click listeners. + * + * @param object + * The raw "value" of the variable change from the client side. + */ + private void fireClick(Map parameters) { + MouseEventDetails mouseDetails = MouseEventDetails + .deSerialize((String) parameters.get("mouseDetails")); + fireEvent(new ClickEvent(this, mouseDetails)); + } + + @SuppressWarnings("unchecked") @Override public void changeVariables(Object source, Map variables) { super.changeVariables(source, variables); + if (variables.containsKey(CLICK_EVENT_ID)) { + fireClick((Map) variables.get(CLICK_EVENT_ID)); + } + // Actions if (actionManager != null) { actionManager.handleActions(variables, this); @@ -1247,7 +1267,7 @@ public class Root extends AbstractComponentContainer implements * The listener to add */ public void addListener(ClickListener listener) { - addListener(VPanel.CLICK_EVENT_IDENTIFIER, ClickEvent.class, listener, + addListener(CLICK_EVENT_ID, ClickEvent.class, listener, ClickListener.clickMethod); } @@ -1259,8 +1279,7 @@ public class Root extends AbstractComponentContainer implements * The listener to remove */ public void removeListener(ClickListener listener) { - removeListener(VPanel.CLICK_EVENT_IDENTIFIER, ClickEvent.class, - listener); + removeListener(CLICK_EVENT_ID, ClickEvent.class, listener); } public void addListener(FragmentChangedListener listener) { -- 2.39.5