From 0d3c35b4f17814a3c146134621374a8a915f10a0 Mon Sep 17 00:00:00 2001 From: Jarno Rantala Date: Mon, 4 Nov 2013 15:21:22 +0200 Subject: [PATCH] Forces redraw in IE 8 when table does post layout. (#12687) Without forcing the redraw, IE8 measures component sizes incorrectly in some cases. Change-Id: I38e8a70e18753714b00f5ca4492749d6c84f10dc --- .../client/ui/table/TableConnector.java | 3 + .../components/table/TableSizeInTabsheet.java | 69 +++++++++++++++++++ .../table/TableSizeInTabsheetTest.java | 50 ++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheet.java create mode 100644 uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheetTest.java diff --git a/client/src/com/vaadin/client/ui/table/TableConnector.java b/client/src/com/vaadin/client/ui/table/TableConnector.java index 47229dc9c7..07689a640f 100644 --- a/client/src/com/vaadin/client/ui/table/TableConnector.java +++ b/client/src/com/vaadin/client/ui/table/TableConnector.java @@ -343,6 +343,9 @@ public class TableConnector extends AbstractHasComponentsConnector implements Scheduler.get().scheduleFinally(new ScheduledCommand() { @Override public void execute() { + // IE8 needs some hacks to measure sizes correctly + Util.forceIE8Redraw(getWidget().getElement()); + getLayoutManager().setNeedsMeasure(TableConnector.this); ServerConnector parent = getParent(); if (parent instanceof ComponentConnector) { diff --git a/uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheet.java b/uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheet.java new file mode 100644 index 0000000000..f84f83718d --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheet.java @@ -0,0 +1,69 @@ +/* + * 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.table; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Component; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Layout; +import com.vaadin.ui.TabSheet; +import com.vaadin.ui.Table; +import com.vaadin.ui.VerticalLayout; + +@SuppressWarnings("serial") +public class TableSizeInTabsheet extends AbstractTestUI { + + static final String TABLE = "table"; + static final String TABSHEET = "tabsheet"; + + @Override + protected void setup(VaadinRequest request) { + VerticalLayout layout = new VerticalLayout(); + layout.setMargin(true); + setContent(layout); + + TabSheet tabSheet = new TabSheet(); + tabSheet.setId(TABSHEET); + layout.addComponent(tabSheet); + tabSheet.addTab(new TabComposite(), "Tab"); + } + + public class TabComposite extends CustomComponent { + + public TabComposite() { + Layout mainLayout = new VerticalLayout(); + addComponent(mainLayout); + setCompositionRoot(mainLayout); + + Component table = new Table(); + table.setWidth("100%"); + table.setId(TABLE); + mainLayout.addComponent(table); + } + } + + @Override + protected String getTestDescription() { + return "The size calculations fails in IE8 when undefined size table is inside a tabsheet"; + } + + @Override + protected Integer getTicketNumber() { + return 12687; + } + +} \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheetTest.java b/uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheetTest.java new file mode 100644 index 0000000000..29fc5a2e52 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheetTest.java @@ -0,0 +1,50 @@ +/* + * 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.table; + +import static com.vaadin.tests.components.table.TableSizeInTabsheet.TABLE; +import static com.vaadin.tests.components.table.TableSizeInTabsheet.TABSHEET; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class TableSizeInTabsheetTest extends MultiBrowserTest { + + private static final String TABSHEET_CONTENT_STYLENAME = "v-tabsheet-content"; + + @Test + public void testTabsheetContentHasTheSameHeightAsTable() { + openTestURL(); + int tableHeight = getTableHeigth(); + int tabSheetContentHeight = getTableSheetContentHeight(); + + Assert.assertEquals(tableHeight, tabSheetContentHeight); + } + + private int getTableHeigth() { + return vaadinElementById(TABLE).getSize().getHeight(); + } + + private int getTableSheetContentHeight() { + WebElement tabsheetContent = vaadinElementById(TABSHEET).findElement( + By.className(TABSHEET_CONTENT_STYLENAME)); + return tabsheetContent.getSize().getHeight(); + } +} -- 2.39.5