summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2016-10-10 22:43:03 +0300
committerPekka Hyvönen <pekka@vaadin.com>2016-12-09 09:39:00 +0200
commit16c54b33c4c66edfc20f42b09e1726de67931c96 (patch)
tree16d78c91af5a249ca62eb6dbffc915ad748854ea
parent97a75f1abcbd1c9001a7ff5b75713e3a913748cb (diff)
downloadvaadin-framework-16c54b33c4c66edfc20f42b09e1726de67931c96.tar.gz
vaadin-framework-16c54b33c4c66edfc20f42b09e1726de67931c96.zip
Make modal window block shortcuts for underlying components (#20366)
Change-Id: Ibb3b52b652d77a1bfa786417b1c92fd0a578035f
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VWindow.java11
-rw-r--r--client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java3
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/ui/WindowAndUIShortcutsTest.java17
3 files changed, 31 insertions, 0 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VWindow.java b/client/src/main/java/com/vaadin/client/ui/VWindow.java
index 5a316933ff..8d64bb6b4f 100644
--- a/client/src/main/java/com/vaadin/client/ui/VWindow.java
+++ b/client/src/main/java/com/vaadin/client/ui/VWindow.java
@@ -1519,4 +1519,15 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
return WINDOW_ORDER_HANDLER.addHandler(WindowOrderEvent.getType(),
handler);
}
+
+ /**
+ * Checks if a modal window is currently open.
+ *
+ * @return <code>true</code> if a modal window is open, <code>false</code>
+ * otherwise.
+ */
+ public static boolean isModalWindowOpen() {
+ return Document.get().getBody()
+ .hasClassName(MODAL_WINDOW_OPEN_CLASSNAME);
+ }
}
diff --git a/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java b/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java
index 677abbbecb..180898453b 100644
--- a/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java
@@ -526,6 +526,9 @@ public class UIConnector extends AbstractSingleComponentContainerConnector
shortcutContextWidget.addDomHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
+ if (VWindow.isModalWindowOpen()) {
+ return;
+ }
if (getWidget().actionHandler != null) {
Element target = Element
.as(event.getNativeEvent().getEventTarget());
diff --git a/uitest/src/test/java/com/vaadin/tests/components/ui/WindowAndUIShortcutsTest.java b/uitest/src/test/java/com/vaadin/tests/components/ui/WindowAndUIShortcutsTest.java
index a10721136d..7c14ae0864 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/ui/WindowAndUIShortcutsTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/ui/WindowAndUIShortcutsTest.java
@@ -17,7 +17,9 @@ package com.vaadin.tests.components.ui;
import org.junit.Assert;
import org.junit.Test;
+import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.TextFieldElement;
@@ -41,4 +43,19 @@ public class WindowAndUIShortcutsTest extends SingleBrowserTest {
Assert.assertTrue(
$(ButtonElement.class).caption("Close page").exists());
}
+
+ @Test
+ public void modalCurtainShouldNotTriggerShortcuts() {
+ openTestURL();
+ $(ButtonElement.class).caption("Show page").first().click();
+ $(ButtonElement.class).caption("Open dialog window").first().click();
+
+ WebElement curtain = findElement(
+ By.className("v-window-modalitycurtain"));
+ curtain.sendKeys(Keys.ESCAPE);
+ // "Close page" should not have been clicked
+ Assert.assertTrue(
+ $(ButtonElement.class).caption("Close page").exists());
+
+ }
}