double reqWidth = getRequiredWidthBoundingClientRectDouble(element);
if (BrowserInfo.get().isIE() && !BrowserInfo.get().isIE8()) {
double csWidth = getRequiredWidthComputedStyleDouble(element);
- if (csWidth > reqWidth && csWidth < (reqWidth + 1)) {
+ if (csWidth > reqWidth && csWidth <= (reqWidth + 1)) {
// IE9 rounds reqHeight to integers BUT sometimes reports wrong
// csHeight it seems, so we only use csHeight if it is within a
// rounding error
+
return csWidth;
}
}
double reqHeight = getRequiredHeightBoundingClientRectDouble(element);
if (BrowserInfo.get().isIE() && !BrowserInfo.get().isIE8()) {
double csHeight = getRequiredHeightComputedStyleDouble(element);
- if (csHeight > reqHeight && csHeight < (reqHeight + 1)) {
+ if (csHeight > reqHeight && csHeight <= (reqHeight + 1)) {
// IE9 rounds reqHeight to integers BUT sometimes reports wrong
// csHeight it seems, so we only use csHeight if it is within a
// rounding error
+
+ // Although sometimes it also happens that IE9 returns an
+ // incorrectly rounded down requiredHeight and a computed height
+ // which is exactly one larger, hence the "<="...
return csHeight;
}
}
--- /dev/null
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.server.Page;
+import com.vaadin.server.Page.Styles;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("serial")
+public class OrderedLayoutInfiniteLayoutPasses extends UI {
+
+ @Override
+ protected void init(VaadinRequest request) {
+ VerticalLayout layout = new VerticalLayout();
+ layout.addComponent(createOpenWindowButton());
+ setContent(layout);
+
+ Styles styles = Page.getCurrent().getStyles();
+ styles.add(".my-separator {background-color: lightgray; min-height:2px;max-height:2px} ");
+ }
+
+ private Button createOpenWindowButton() {
+ Button button = new Button("Open modal window");
+ button.addClickListener(new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ UI.getCurrent().addWindow(createWindow());
+ }
+ });
+ return button;
+ }
+
+ private Window createWindow() {
+ VerticalLayout contentHolder = new VerticalLayout();
+ contentHolder.addComponent(new Label("window content"));
+
+ Label separator = new Label();
+ separator.setWidth(100, Unit.PERCENTAGE);
+ separator.addStyleName("my-separator");
+
+ HorizontalLayout buttons = new HorizontalLayout();
+ buttons.addComponent(new Button("button 1"));
+ buttons.addComponent(new Button("button 2"));
+
+ VerticalLayout windowContent = new VerticalLayout();
+ windowContent.setSizeFull();
+ windowContent.addComponent(contentHolder);
+ windowContent.addComponent(separator);
+ windowContent.addComponent(buttons);
+ windowContent.setExpandRatio(contentHolder, 1.0f);
+
+ Window window = new Window();
+ window.setModal(true);
+ window.setWidth(680, Unit.PIXELS);
+ window.setHeight(700, Unit.PIXELS);
+ window.setContent(windowContent);
+
+ return window;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2000-2014 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.orderedlayout;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.remote.DesiredCapabilities;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.parallel.Browser;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class OrderedLayoutInfiniteLayoutPassesTest extends MultiBrowserTest {
+
+ @Override
+ protected boolean requireWindowFocusForIE() {
+ return true;
+ }
+
+ @Override
+ public List<DesiredCapabilities> getBrowsersToTest() {
+ List<DesiredCapabilities> b = super.getBrowsersToTest();
+ // Chrome and PhantomJS do not support browser zoom changes
+ b.remove(Browser.CHROME.getDesiredCapabilities());
+ b.remove(Browser.PHANTOMJS.getDesiredCapabilities());
+ return b;
+ }
+
+ @Test
+ public void ensureFiniteLayoutPhase() throws Exception {
+ openTestURL("debug");
+ zoomBrowserIn();
+ try {
+ $(ButtonElement.class).first().click();
+ assertNoErrorNotifications();
+ resetZoom();
+ assertNoErrorNotifications();
+ } finally {
+ // Reopen test to ensure that modal window does not prevent zoom
+ // reset from taking place
+ openTestURL();
+ resetZoom();
+ }
+ }
+
+ private void zoomBrowserIn() {
+ WebElement html = driver.findElement(By.tagName("html"));
+ html.sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
+ }
+
+ private void resetZoom() {
+ WebElement html = driver.findElement(By.tagName("html"));
+ html.sendKeys(Keys.chord(Keys.CONTROL, "0"));
+ }
+}