Revision: 9606
Author: fmal...@google.com
Date: Tue Jan 25 05:06:56 2011
Log: Handle deferred layout updates gracefully in SplitLayoutPanel resize logic.

Resubmitting with fixes for the CellViewSuite test breakage.

Review at http://gwt-code-reviews.appspot.com/1295804

Review by: jlaba...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=9606

Modified:
 /trunk/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java

=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java Fri Jan 7 05:51:44 2011 +++ /trunk/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java Tue Jan 25 05:06:56 2011
@@ -100,6 +100,8 @@
     private final boolean reverse;
     private int minSize;

+    private double centerSize, syncedCenterSize;
+
     public Splitter(Widget target, boolean reverse) {
       this.target = target;
       this.reverse = reverse;
@@ -176,7 +178,26 @@

     protected abstract int getTargetSize();

+    private double getMaxSize() {
+      // To avoid seeing stale center size values due to deferred layout
+      // updates, maintain our own copy up to date and resync when the
+      // DockLayoutPanel value changes.
+      double newCenterSize = getCenterSize();
+      if (syncedCenterSize != newCenterSize) {
+        syncedCenterSize = newCenterSize;
+        centerSize = newCenterSize;
+      }
+
+ return Math.max(((LayoutData) target.getLayoutData()).size + centerSize,
+                0);
+    }
+
     private void setAssociatedWidgetSize(double size) {
+      double maxSize = getMaxSize();
+      if (size > maxSize) {
+        size = maxSize;
+      }
+
       if (size < minSize) {
         size = minSize;
       }
@@ -186,12 +207,8 @@
         return;
       }

-      // Don't grow beyond remaining space
-      double centerSize = getCenterSize();
-      if (size - layout.size > centerSize) {
-        size = layout.size + centerSize;
-      }
-
+      // Adjust our view until the deferred layout gets scheduled.
+      centerSize += layout.size - size;
       layout.size = size;

       // Defer actually updating the layout, so that if we receive many

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to