]> source.dussan.org Git - vaadin-framework.git/commitdiff
ITabsheet: fixed very bad flickering issue (seen in WH)
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 10 Mar 2008 12:11:07 +0000 (12:11 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 10 Mar 2008 12:11:07 +0000 (12:11 +0000)
svn changeset:4012/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java

index 83f4f138b452f3d33fd4ccc6620652406f77ffd2..9fde75cd11ea65d9965fb61d242634a8bae7f3fc 100644 (file)
@@ -31,6 +31,13 @@ public class ITabsheet extends ITabsheetBase implements
     private String height;
     private String width;
 
+    /**
+     * Previous visible widget is set invisible with CSS (not display: none, but
+     * visibility: hidden), to avoid flickering during render process. Normal
+     * visibility must be returned later when new widget is rendered.
+     */
+    private Widget previousVisibleWidget;
+
     private final TabListener tl = new TabListener() {
 
         public void onTabSelected(SourcesTabEvents sender, final int tabIndex) {
@@ -39,7 +46,12 @@ public class ITabsheet extends ITabsheetBase implements
                 // run updating variables in deferred command to bypass some FF
                 // optimization issues
                 DeferredCommand.addCommand(new Command() {
+
                     public void execute() {
+                        previousVisibleWidget = tp.getWidget(tp
+                                .getVisibleWidget());
+                        DOM.setStyleAttribute(previousVisibleWidget
+                                .getElement(), "visibility", "hidden");
                         client.updateVariable(id, "selected", ""
                                 + tabKeys.get(tabIndex), true);
                     }
@@ -142,6 +154,11 @@ public class ITabsheet extends ITabsheetBase implements
                 tp.showWidget(activeTabIndex);
                 (content).updateFromUIDL(contentUIDL, client);
                 ITabsheet.this.removeStyleDependentName("loading");
+                if (previousVisibleWidget != null) {
+                    DOM.setStyleAttribute(previousVisibleWidget.getElement(),
+                            "visibility", "");
+                    previousVisibleWidget = null;
+                }
                 ITabsheet.this.iLayout();
             }
         });