diff options
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()); + + } } |