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