]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merged "Test case and fix for #2816: Form rendering causes artifacts in certain cases
authorArtur Signell <artur.signell@itmill.com>
Thu, 2 Apr 2009 12:52:59 +0000 (12:52 +0000)
committerArtur Signell <artur.signell@itmill.com>
Thu, 2 Apr 2009 12:52:59 +0000 (12:52 +0000)
http://dev.itmill.com/ticket/2816"

svn changeset:7289/svn branch:6.0

src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java
src/com/itmill/toolkit/tests/components/form/FormRenderingFlicker.java [new file with mode: 0644]

index 1550d85446f45627cd3e3cadeba8bbf76a13266c..0b91268d251f4e3675258793ecbe65a0f859dcd6 100644 (file)
@@ -52,6 +52,8 @@ public class IForm extends ComplexPanel implements Container {
 \r
     private int borderPaddingVertical;\r
 \r
+    private boolean rendering = false;\r
+\r
     public IForm() {\r
         setElement(DOM.createDiv());\r
         DOM.appendChild(getElement(), fieldSet);\r
@@ -72,6 +74,8 @@ public class IForm extends ComplexPanel implements Container {
     }\r
 \r
     public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
+        rendering = true;\r
+\r
         if (this.client == null) {\r
             this.client = client;\r
             borderPaddingVertical = getOffsetHeight();\r
@@ -79,6 +83,7 @@ public class IForm extends ComplexPanel implements Container {
         }\r
 \r
         if (client.updateComponent(this, uidl, false)) {\r
+            rendering = false;\r
             return;\r
         }\r
 \r
@@ -159,6 +164,8 @@ public class IForm extends ComplexPanel implements Container {
                 client.unregisterPaintable(footer);\r
             }\r
         }\r
+\r
+        rendering = false;\r
     }\r
 \r
     public void updateSize() {\r
@@ -266,7 +273,7 @@ public class IForm extends ComplexPanel implements Container {
 \r
         updateSize();\r
 \r
-        if (height.equals("")) {\r
+        if (!rendering && height.equals("")) {\r
             // Width might affect height\r
             Util.updateRelativeChildrenAndSendSizeUpdateEvent(client, this);\r
         }\r
diff --git a/src/com/itmill/toolkit/tests/components/form/FormRenderingFlicker.java b/src/com/itmill/toolkit/tests/components/form/FormRenderingFlicker.java
new file mode 100644 (file)
index 0000000..f670aa7
--- /dev/null
@@ -0,0 +1,65 @@
+package com.itmill.toolkit.tests.components.form;\r
+\r
+import com.itmill.toolkit.data.Item;\r
+import com.itmill.toolkit.event.ItemClickEvent;\r
+import com.itmill.toolkit.event.ItemClickEvent.ItemClickListener;\r
+import com.itmill.toolkit.tests.components.TestBase;\r
+import com.itmill.toolkit.ui.Form;\r
+import com.itmill.toolkit.ui.Panel;\r
+import com.itmill.toolkit.ui.Table;\r
+import com.itmill.toolkit.ui.VerticalLayout;\r
+\r
+public class FormRenderingFlicker extends TestBase {\r
+\r
+    private VerticalLayout tableLayout;\r
+    private Table table;\r
+    private Panel tablePanel;\r
+    private Form form;\r
+\r
+    @Override\r
+    protected String getDescription() {\r
+        return "Clicking on an item in the table will replace the panel (surrounding the table) with a form. This should not cause the table rows to move downwards or cause any other visible flicker";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return 2816;\r
+    }\r
+\r
+    @Override\r
+    protected void setup() {\r
+        createTableLayout();\r
+        form = new Form();\r
+\r
+        tablePanel = new Panel();\r
+        tablePanel.setLayout(tableLayout);\r
+\r
+        addComponent(tablePanel);\r
+    }\r
+\r
+    private void createTableLayout() {\r
+        tableLayout = new VerticalLayout();\r
+        table = new Table();\r
+        table.addContainerProperty("name", String.class, "");\r
+        table.addContainerProperty("age", String.class, "");\r
+        for (int i = 0; i < 100; i++) {\r
+            table.addItem(new Object[] { "Name " + i, String.valueOf(i) },\r
+                    new Object());\r
+        }\r
+        table.setImmediate(true);\r
+        table.addListener(new ItemClickListener() {\r
+\r
+            public void itemClick(ItemClickEvent event) {\r
+                clicked(event.getItem());\r
+            }\r
+\r
+        });\r
+\r
+        tableLayout.addComponent(table);\r
+    }\r
+\r
+    protected void clicked(Item item) {\r
+        getLayout().replaceComponent(tablePanel, form);\r
+    }\r
+\r
+}\r