]> source.dussan.org Git - vaadin-framework.git/commitdiff
Forces redraw in IE 8 when table does post layout. (#12687)
authorJarno Rantala <jarno.rantala@vaadin.com>
Mon, 4 Nov 2013 13:21:22 +0000 (15:21 +0200)
committerVaadin Code Review <review@vaadin.com>
Wed, 6 Nov 2013 11:24:15 +0000 (11:24 +0000)
Without forcing the redraw, IE8 measures component sizes incorrectly in some cases.

Change-Id: I38e8a70e18753714b00f5ca4492749d6c84f10dc

client/src/com/vaadin/client/ui/table/TableConnector.java
uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheet.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/table/TableSizeInTabsheetTest.java [new file with mode: 0644]

index 47229dc9c7e867532b2a0bf48c4a3b3fd29a7258..07689a640f69f8f824996a77fd5c6d6322230f9f 100644 (file)
@@ -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 (file)
index 0000000..f84f837
--- /dev/null
@@ -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 (file)
index 0000000..29fc5a2
--- /dev/null
@@ -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();
+    }
+}