From: Felype Santiago Ferreira Date: Wed, 13 Nov 2013 11:58:06 +0000 (+0200) Subject: Fix for scrolling with modal opened. (#12899) X-Git-Tag: 7.1.10~10 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=fbc48c6ab75479560919a463ba5693b44bb0e811;p=vaadin-framework.git Fix for scrolling with modal opened. (#12899) Change-Id: I9ba142a35ab887bb3a71c7311064ebab77bc01ba --- diff --git a/WebContent/VAADIN/themes/base/base.scss b/WebContent/VAADIN/themes/base/base.scss index c6760e1907..aa1e778d6f 100644 --- a/WebContent/VAADIN/themes/base/base.scss +++ b/WebContent/VAADIN/themes/base/base.scss @@ -53,6 +53,11 @@ margin: 0; overflow: hidden; } + +.v-modal-window-open { + overflow: hidden; +} + $font-size: 16px; $line-height: normal; @mixin base { diff --git a/client/src/com/vaadin/client/ui/VWindow.java b/client/src/com/vaadin/client/ui/VWindow.java index e27ad383a9..ad9d0eac7e 100644 --- a/client/src/com/vaadin/client/ui/VWindow.java +++ b/client/src/com/vaadin/client/ui/VWindow.java @@ -22,6 +22,7 @@ import java.util.Comparator; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Style; import com.google.gwt.dom.client.Style.Position; import com.google.gwt.dom.client.Style.Unit; @@ -67,6 +68,8 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, public static final String CLASSNAME = "v-window"; + private static final String MODAL_WINDOW_OPEN_CLASSNAME = "v-modal-window-open"; + private static final int STACKING_OFFSET_PIXELS = 15; public static final int Z_INDEX = 10000; @@ -528,10 +531,14 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, getOverlayContainer().appendChild(getModalityCurtain()); } + Document.get().getBody().addClassName(MODAL_WINDOW_OPEN_CLASSNAME); } private void hideModalityCurtain() { + Document.get().getBody().removeClassName(MODAL_WINDOW_OPEN_CLASSNAME); + modalityCurtain.removeFromParent(); + if (BrowserInfo.get().isIE()) { // IE leaks memory in certain cases unless we release the reference // (#9197) diff --git a/uitest/src/com/vaadin/tests/components/window/ScrollingBodyElementWithModalOpened.java b/uitest/src/com/vaadin/tests/components/window/ScrollingBodyElementWithModalOpened.java new file mode 100644 index 0000000000..2f1c0ff685 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/window/ScrollingBodyElementWithModalOpened.java @@ -0,0 +1,58 @@ +/* + * Copyright 2000-2013 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.window; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; + +/** + * + * @since 7.1.9 + * @author Vaadin Ltd + */ +public class ScrollingBodyElementWithModalOpened extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + VerticalLayout verticalLayout = new VerticalLayout(); + verticalLayout.setHeight("10000px"); + + Window window = new Window("Caption"); + + VerticalLayout layout = new VerticalLayout(); + layout.setWidth("300px"); + layout.setHeight("300px"); + window.setContent(layout); + + addWindow(window); + + window.setModal(true); + + addComponent(verticalLayout); + } + + @Override + protected String getTestDescription() { + return "Screen must not scroll with modal opened."; + } + + @Override + protected Integer getTicketNumber() { + return 12899; + } +} diff --git a/uitest/src/com/vaadin/tests/components/window/ScrollingBodyElementWithModalOpenedTest.java b/uitest/src/com/vaadin/tests/components/window/ScrollingBodyElementWithModalOpenedTest.java new file mode 100644 index 0000000000..b6474519b0 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/window/ScrollingBodyElementWithModalOpenedTest.java @@ -0,0 +1,47 @@ +/* + * Copyright 2000-2013 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.window; + +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.By; +import com.vaadin.testbench.commands.TestBenchElementCommands; +import com.vaadin.tests.tb3.MultiBrowserTest; + +/** + * + * @since + * @author Vaadin Ltd + */ +public class ScrollingBodyElementWithModalOpenedTest extends MultiBrowserTest { + + @Test + public void testWindowScrollbars() throws Exception { + openTestURL(); + + WebElement bodyElement = driver.findElement(By + .className("v-modal-window-open")); + + TestBenchElementCommands scrollable = testBenchElement(bodyElement); + scrollable.scroll(1000); + + Thread.sleep(1000); + + compareScreen(getScreenshotBaseName()); + } + +}