summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2014-04-04 14:08:25 +0300
committerVaadin Code Review <review@vaadin.com>2014-04-04 12:46:43 +0000
commitbf4cebc36c3efa6bbd42f16f30d6a06a4bf94527 (patch)
tree0f12948c224054f328d2e68afe26c8d359bba6ae
parentff4cce403e2b3a89726144d2e688024f8b12fcad (diff)
downloadvaadin-framework-bf4cebc36c3efa6bbd42f16f30d6a06a4bf94527.tar.gz
vaadin-framework-bf4cebc36c3efa6bbd42f16f30d6a06a4bf94527.zip
Mousedown - mouseout - mouseover - mouseup now counts a click (#13550)
Change-Id: Id1f58b1ac6c207cec3357bcd96e1eb8d8de256a0
-rw-r--r--client/src/com/vaadin/client/ui/VButton.java23
-rw-r--r--uitest/src/com/vaadin/tests/components/button/ButtonClick.java70
-rw-r--r--uitest/src/com/vaadin/tests/components/button/ButtonClickTest.java42
3 files changed, 130 insertions, 5 deletions
diff --git a/client/src/com/vaadin/client/ui/VButton.java b/client/src/com/vaadin/client/ui/VButton.java
index 840ed39114..98df258f57 100644
--- a/client/src/com/vaadin/client/ui/VButton.java
+++ b/client/src/com/vaadin/client/ui/VButton.java
@@ -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
index 0000000000..30692649c5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/button/ButtonClick.java
@@ -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
index 0000000000..77b35092de
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/button/ButtonClickTest.java
@@ -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());
+ }
+}