From 1edf91537ff93c8116372a3ba9e10bebc6ae3e89 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Mon, 18 Aug 2008 13:27:36 +0000 Subject: [PATCH] fixes #1988 (Window moving weirdness with undefined width) svn changeset:5207/svn branch:trunk --- .../terminal/gwt/client/ui/IWindow.java | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java index a39eca1063..a77df27547 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java @@ -207,18 +207,6 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { setModal(!modal); } - // Initialize the size from UIDL - // FIXME relational size is for outer size, others are applied for - // content - if (uidl.hasVariable("width")) { - final String width = uidl.getStringVariable("width"); - if (width.indexOf("px") < 0) { - DOM.setStyleAttribute(getElement(), "width", width); - } else { - setWidth(width); - } - } - // Initialize the position form UIDL try { final int positionx = uidl.getIntVariable("positionx"); @@ -235,6 +223,32 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { show(); } + // Initialize the size from UIDL + /* + * FIXME non-pixel size is set as "outer size", pixels are applied for + * content area. This is due history as earlier only pixels where + * allowed. + */ + if (uidl.hasVariable("width")) { + final String width = uidl.getStringVariable("width"); + if (width.indexOf("px") < 0) { + /* + * Only using non-pixel size for initial size measurement. Then + * fix content area with pixels. + */ + DOM.setStyleAttribute(getElement(), "width", width); + int elementPropertyInt = DOM.getElementPropertyInt( + getElement(), "offsetWidth"); + DOM.setStyleAttribute(getElement(), "width", ""); + elementPropertyInt -= (DOM.getElementPropertyInt(getElement(), + "offsetWidth") - DOM.getElementPropertyInt(contents, + "offsetWidth")); + setWidth(elementPropertyInt + "px"); + } else { + setWidth(width); + } + } + // Height set after show so we can detect space used by decorations if (uidl.hasVariable("height")) { final String height = uidl.getStringVariable("height"); -- 2.39.5