diff options
author | Artur Signell <artur@vaadin.com> | 2014-04-04 14:08:25 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-04-04 12:46:43 +0000 |
commit | bf4cebc36c3efa6bbd42f16f30d6a06a4bf94527 (patch) | |
tree | 0f12948c224054f328d2e68afe26c8d359bba6ae | |
parent | ff4cce403e2b3a89726144d2e688024f8b12fcad (diff) | |
download | vaadin-framework-bf4cebc36c3efa6bbd42f16f30d6a06a4bf94527.tar.gz vaadin-framework-bf4cebc36c3efa6bbd42f16f30d6a06a4bf94527.zip |
Mousedown - mouseout - mouseover - mouseup now counts a click (#13550)
Change-Id: Id1f58b1ac6c207cec3357bcd96e1eb8d8de256a0
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()); + } +} |