From 5811b0746d3b1337d569dfa3590aec461ab45c8f Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 10 Oct 2016 22:43:03 +0300 Subject: [PATCH] Make modal window block shortcuts for underlying components (#20366) Change-Id: Ibb3b52b652d77a1bfa786417b1c92fd0a578035f --- .../main/java/com/vaadin/client/ui/VWindow.java | 11 +++++++++++ .../com/vaadin/client/ui/ui/UIConnector.java | 3 +++ .../components/ui/WindowAndUIShortcutsTest.java | 17 +++++++++++++++++ 3 files changed, 31 insertions(+) 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 008ea4ef83..da47b9381f 100644 --- a/client/src/main/java/com/vaadin/client/ui/VWindow.java +++ b/client/src/main/java/com/vaadin/client/ui/VWindow.java @@ -1516,4 +1516,15 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, return addHandler(handler, WindowMoveEvent.getType()); } + /** + * Checks if a modal window is currently open. + * + * @return true if a modal window is open, false + * 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 d94f030d26..c31fcb9ed6 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 @@ -506,6 +506,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 ba82806cac..76cc0ee807 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()); + + } } -- 2.39.5