]> source.dussan.org Git - vaadin-framework.git/commitdiff
Mousedown - mouseout - mouseover - mouseup now counts a click (#13550)
authorArtur Signell <artur@vaadin.com>
Fri, 4 Apr 2014 11:08:25 +0000 (14:08 +0300)
committerVaadin Code Review <review@vaadin.com>
Fri, 4 Apr 2014 12:46:43 +0000 (12:46 +0000)
Change-Id: Id1f58b1ac6c207cec3357bcd96e1eb8d8de256a0

client/src/com/vaadin/client/ui/VButton.java
uitest/src/com/vaadin/tests/components/button/ButtonClick.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/button/ButtonClickTest.java [new file with mode: 0644]

index 840ed39114dd05a85279c58146d1f77236d9c67a..98df258f57e47bd501650f0d9c7306f197073436 100644 (file)
@@ -225,10 +225,16 @@ public class VButton extends FocusWidget implements ClickHandler {
                 DOM.eventPreventDefault(event);
             }
             break;
+        case Event.ONMOUSEOVER:
+            if (isCapturing && isTargetInsideButton(event)) {
+                // This means a mousedown happened on the button and a mouseup
+                // has not happened yet
+                setHovering(true);
+                addStyleName(CLASSNAME_PRESSED);
+            }
+            break;
         case Event.ONMOUSEOUT:
-            Element to = event.getRelatedTarget();
-            if (getElement().isOrHasChild(DOM.eventGetTarget(event))
-                    && (to == null || !getElement().isOrHasChild(to))) {
+            if (isTargetInsideButton(event)) {
                 if (clickPending
                         && Math.abs(mousedownX - event.getClientX()) < MOVE_THRESHOLD
                         && Math.abs(mousedownY - event.getClientY()) < MOVE_THRESHOLD) {
@@ -236,8 +242,6 @@ public class VButton extends FocusWidget implements ClickHandler {
                     break;
                 }
                 clickPending = false;
-                if (isCapturing) {
-                }
                 setHovering(false);
                 removeStyleName(CLASSNAME_PRESSED);
             }
@@ -290,6 +294,15 @@ public class VButton extends FocusWidget implements ClickHandler {
         }
     }
 
+    /**
+     * Check if the event occurred over an element which is part of this button
+     */
+    private boolean isTargetInsideButton(Event event) {
+        Element to = event.getRelatedTarget();
+        return getElement().isOrHasChild(DOM.eventGetTarget(event))
+                && (to == null || !getElement().isOrHasChild(to));
+    }
+
     final void setHovering(boolean hovering) {
         if (hovering != isHovering()) {
             isHovering = hovering;
diff --git a/uitest/src/com/vaadin/tests/components/button/ButtonClick.java b/uitest/src/com/vaadin/tests/components/button/ButtonClick.java
new file mode 100644 (file)
index 0000000..3069264
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.button;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+
+public class ButtonClick extends AbstractTestUI {
+
+    public final static String SUCCESS_TEXT = "Click received succesfully!";
+    public final static String WRONG_BUTTON_TEXT = "Wrong button clicked.";
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        final VerticalLayout rootLayout = new VerticalLayout();
+        final Label statusLabel = new Label("Test initialized");
+        rootLayout.addComponent(new Button("Click here", new ClickListener() {
+
+            @Override
+            public void buttonClick(ClickEvent event) {
+                statusLabel.setValue(SUCCESS_TEXT);
+            }
+
+        }));
+        Button visitLocation = new Button("Drag here", new ClickListener() {
+
+            @Override
+            public void buttonClick(ClickEvent event) {
+                statusLabel.setValue(WRONG_BUTTON_TEXT);
+            }
+
+        });
+        rootLayout.addComponent(statusLabel);
+        rootLayout.addComponent(visitLocation);
+        rootLayout.setComponentAlignment(visitLocation, Alignment.BOTTOM_RIGHT);
+        rootLayout.setSizeFull();
+        rootLayout.setMargin(true);
+        setContent(rootLayout);
+    }
+
+    @Override
+    protected String getTestDescription() {
+        return "Verify button click logic";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 13550;
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/button/ButtonClickTest.java b/uitest/src/com/vaadin/tests/components/button/ButtonClickTest.java
new file mode 100644 (file)
index 0000000..77b3509
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2000-2013 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.button;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ButtonClickTest extends MultiBrowserTest {
+
+    @Test
+    public void buttonMouseDownOutOverUp() {
+        openTestURL();
+
+        WebElement clickedButton = vaadinElement("/VVerticalLayout[0]/VButton[0]");
+        WebElement visitedButton = vaadinElement("/VVerticalLayout[0]/VButton[1]");
+
+        new Actions(driver).moveToElement(clickedButton).clickAndHold()
+                .moveToElement(visitedButton).moveToElement(clickedButton)
+                .release().perform();
+
+        assertEquals(ButtonClick.SUCCESS_TEXT,
+                vaadinElement("/VVerticalLayout[0]/VLabel[0]").getText());
+    }
+}