diff options
author | Anthony Guerreiro <anthony@vaadin.com> | 2014-07-02 11:58:34 +0300 |
---|---|---|
committer | Bogdan Udrescu <bogdan@vaadin.com> | 2014-07-29 17:04:38 +0300 |
commit | 6c4e10a661cc98130ad908f0b2c5c0caed89b104 (patch) | |
tree | c7235d9c29266cc4b9e7ff2f9d805e4afcfe3af0 | |
parent | 8b45bf030dcf34a4b9f9259131ac8d101e9f503a (diff) | |
download | vaadin-framework-6c4e10a661cc98130ad908f0b2c5c0caed89b104.tar.gz vaadin-framework-6c4e10a661cc98130ad908f0b2c5c0caed89b104.zip |
Fix NativeButton clickEvent coordinates in IE11 (#14022)
Two clicks were being triggered for IE11,
the first with coordinates (0,0) and the
second with the correct coordinates.
Change-Id: I6f0feb520710b254eac6542f082a5012de2c5f85
3 files changed, 163 insertions, 1 deletions
diff --git a/client/src/com/vaadin/client/ui/VNativeButton.java b/client/src/com/vaadin/client/ui/VNativeButton.java index 93d8d958d6..8e0dd2bce1 100644 --- a/client/src/com/vaadin/client/ui/VNativeButton.java +++ b/client/src/com/vaadin/client/ui/VNativeButton.java @@ -104,7 +104,9 @@ public class VNativeButton extends Button implements ClickHandler { } clickPending = false; } else if (event.getTypeInt() == Event.ONFOCUS) { - if (BrowserInfo.get().isIE() && clickPending) { + if (BrowserInfo.get().isIE() + && BrowserInfo.get().getBrowserMajorVersion() < 11 + && clickPending) { /* * The focus event will mess up IE and IE will not trigger the * mouse up event (which in turn triggers the click event) until diff --git a/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonClick.java b/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonClick.java new file mode 100644 index 0000000000..b6c80aea0c --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonClick.java @@ -0,0 +1,89 @@ +/* + * Copyright 2000-2014 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.nativebutton; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.NativeButton; + +/** + * UI used to validate click coordinates reported from clicks on NativeButton + * elements. + * + * @author Vaadin Ltd + */ +@SuppressWarnings("serial") +public class NativeButtonClick extends AbstractTestUI { + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server. + * VaadinRequest) + */ + @Override + protected void setup(VaadinRequest request) { + final Label label1 = new Label("0,0"); + final Label label2 = new Label("0,0"); + + Button button1 = new NativeButton("Button1", + new NativeButton.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + label1.setValue(event.getClientX() + "," + + event.getClientY()); + } + }); + Button button2 = new NativeButton("Button2", + new NativeButton.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + label2.setValue(event.getClientX() + "," + + event.getClientY()); + } + }); + + HorizontalLayout layout = new HorizontalLayout(); + layout.addComponents(button1, button2, label1, label2); + layout.setSpacing(true); + addComponent(layout); + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTestDescription() + */ + @Override + protected String getTestDescription() { + return "Validate click event coordinates not erroneously returned as x=0, y=0"; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber() + */ + @Override + protected Integer getTicketNumber() { + return 14022; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonClickTest.java b/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonClickTest.java new file mode 100644 index 0000000000..cab2acefff --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/nativebutton/NativeButtonClickTest.java @@ -0,0 +1,71 @@ +/* + * Copyright 2000-2014 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.nativebutton; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.LabelElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +/** + * Test to see if coordinates returned by click event on NativeButtons look + * good. (see #14022) + * + * @author Vaadin Ltd + */ +public class NativeButtonClickTest extends MultiBrowserTest { + + /* + * (non-Javadoc) + * + * @see com.vaadin.tests.tb3.MultiBrowserTest#getBrowsersToTest() + */ + + @Test + public void testClickCoordinates() { + openTestURL(); + + clickFirstButton(); + String eventCoordinates = getFirstLabelValue(); + Assert.assertNotEquals("0,0", eventCoordinates); + + clickSecondButton(); + eventCoordinates = getSecondLabelValue(); + Assert.assertNotEquals("0,0", eventCoordinates); + } + + private void clickFirstButton() { + ButtonElement button = $(ButtonElement.class).first(); + button.click(); + } + + private void clickSecondButton() { + ButtonElement button = $(ButtonElement.class).get(1); + button.click(); + } + + private String getFirstLabelValue() { + LabelElement label = $(LabelElement.class).get(1); + return label.getText(); + } + + private String getSecondLabelValue() { + LabelElement label = $(LabelElement.class).get(2); + return label.getText(); + } +} |