Просмотр исходного кода

Make modal window block shortcuts for underlying components (#20366)

Change-Id: Ibb3b52b652d77a1bfa786417b1c92fd0a578035f
tags/7.7.4
Artur Signell 7 лет назад
Родитель
Сommit
5811b0746d

+ 11
- 0
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 <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);
}

}

+ 3
- 0
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());

+ 17
- 0
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());

}
}

Загрузка…
Отмена
Сохранить