From 35c68514a234c858dd13660e05b10deaaaf05d2f Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Tue, 2 Dec 2008 10:25:37 +0000 Subject: [PATCH] Fixed #2257 for Panel and TabSheet. svn changeset:6067/svn branch:trunk --- .../toolkit/terminal/gwt/client/Util.java | 10 +++++++--- .../toolkit/terminal/gwt/client/ui/IPanel.java | 12 +++++++++++- .../terminal/gwt/client/ui/ITabsheet.java | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/Util.java b/src/com/itmill/toolkit/terminal/gwt/client/Util.java index cd446bb59a..9f208568df 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/Util.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/Util.java @@ -512,6 +512,12 @@ public class Util { public static void updateRelativeChildrenAndSendSizeUpdateEvent( ApplicationConnection client, HasWidgets container) { + updateRelativeChildrenAndSendSizeUpdateEvent(client, container, + (Widget) container); + } + + public static void updateRelativeChildrenAndSendSizeUpdateEvent( + ApplicationConnection client, HasWidgets container, Widget widget) { /* * Relative sized children must be updated first so the component has * the correct outer dimensions when signaling a size change to the @@ -520,13 +526,11 @@ public class Util { Iterator childIterator = container.iterator(); while (childIterator.hasNext()) { Widget w = childIterator.next(); - // alert("Update relative size for " + getSimpleName(w)); client.handleComponentRelativeSize(w); } - // alert("abc"); HashSet widgets = new HashSet(); - widgets.add((Widget) container); + widgets.add(widget); Util.componentSizeUpdated(widgets); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IPanel.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IPanel.java index 2b7a853824..22d215f4e3 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IPanel.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IPanel.java @@ -51,7 +51,7 @@ public class IPanel extends SimplePanel implements Container { ShortcutActionHandler shortcutHandler; - private String width; + private String width = ""; private Element geckoCaptionMeter; @@ -432,10 +432,20 @@ public class IPanel extends SimplePanel implements Container { @Override public void setWidth(String width) { + if (this.width.equals(width)) { + return; + } + this.width = width; super.setWidth(width); if (!rendering) { runHacks(true); + + if (height.equals("")) { + // Width change may affect height + Util.updateRelativeChildrenAndSendSizeUpdateEvent(client, this); + } + } } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java index 06a6810fbb..ccb7bb6a75 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java @@ -431,6 +431,13 @@ public class ITabsheet extends ITabsheetBase { ITabsheet.this.iLayout(); (content).updateFromUIDL(contentUIDL, client); + /* + * The size of a cached, relative sized component must be updated to + * report correct size to updateOpenTabSize(). + */ + if (contentUIDL.getBooleanAttribute("cached")) { + client.handleComponentRelativeSize((Widget) content); + } updateOpenTabSize(); ITabsheet.this.removeStyleDependentName("loading"); if (previousVisibleWidget != null) { @@ -469,6 +476,11 @@ public class ITabsheet extends ITabsheetBase { @Override public void setWidth(String width) { + if ((this.width == null && width.equals("")) + || (this.width != null && this.width.equals(width))) { + return; + } + super.setWidth(width); if (width.equals("")) { width = null; @@ -487,6 +499,11 @@ public class ITabsheet extends ITabsheetBase { } if (!rendering) { + if (isDynamicHeight()) { + Util.updateRelativeChildrenAndSendSizeUpdateEvent(client, tp, + this); + } + updateOpenTabSize(); iLayout(); // TODO Check if this is needed -- 2.39.5