]> source.dussan.org Git - vaadin-framework.git/commitdiff
Root now sends click events, fixes #8151
authorMarc Englund <marc@vaadin.com>
Mon, 19 Dec 2011 08:59:57 +0000 (10:59 +0200)
committerMarc Englund <marc@vaadin.com>
Mon, 19 Dec 2011 09:01:09 +0000 (11:01 +0200)
src/com/vaadin/terminal/gwt/client/ui/VView.java
src/com/vaadin/ui/Root.java

index 04ddf8c199d789bb92395a4d93a8d09b8127fce4..50666e1674c5ee4df516ddc672c405b3dfb9d0c9 100644 (file)
@@ -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
index 03b7ec1a5f89d4110467979100039c179b8b1b15..9e037222888f8078decd2790aa160d55ee8f8887 100644 (file)
@@ -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<String, Object> parameters) {
+        MouseEventDetails mouseDetails = MouseEventDetails
+                .deSerialize((String) parameters.get("mouseDetails"));
+        fireEvent(new ClickEvent(this, mouseDetails));
+    }
+
+    @SuppressWarnings("unchecked")
     @Override
     public void changeVariables(Object source, Map<String, Object> variables) {
         super.changeVariables(source, variables);
 
+        if (variables.containsKey(CLICK_EVENT_ID)) {
+            fireClick((Map<String, Object>) 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) {