diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/src/com/vaadin/client/ui/VWindow.java | 19 | ||||
-rw-r--r-- | client/src/com/vaadin/client/ui/window/WindowConnector.java | 49 |
2 files changed, 36 insertions, 32 deletions
diff --git a/client/src/com/vaadin/client/ui/VWindow.java b/client/src/com/vaadin/client/ui/VWindow.java index 1b35b020f2..dc64eb7529 100644 --- a/client/src/com/vaadin/client/ui/VWindow.java +++ b/client/src/com/vaadin/client/ui/VWindow.java @@ -39,7 +39,6 @@ import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.BrowserInfo; -import com.vaadin.client.ComponentConnector; import com.vaadin.client.ConnectorMap; import com.vaadin.client.Console; import com.vaadin.client.Focusable; @@ -79,9 +78,6 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, public static final int Z_INDEX = 10000; /** For internal use only. May be removed or replaced in the future. */ - public ComponentConnector layout; - - /** For internal use only. May be removed or replaced in the future. */ public Element contents; /** For internal use only. May be removed or replaced in the future. */ @@ -742,16 +738,17 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, } private void updateContentsSize() { + Widget childWidget = getWidget(); + // Update child widget dimensions - if (client != null) { - Widget childWidget = layout.getWidget(); + if (client != null && childWidget != null) { client.handleComponentRelativeSize(childWidget); if (childWidget instanceof HasWidgets) { client.runDescendentsLayout((HasWidgets) childWidget); } } - LayoutManager layoutManager = LayoutManager.get(client); + LayoutManager layoutManager = getLayoutManager(); layoutManager.setNeedsMeasure(ConnectorMap.get(client).getConnector( this)); layoutManager.layoutNow(); @@ -939,18 +936,22 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, } private int getDecorationHeight() { - LayoutManager lm = layout.getLayoutManager(); + LayoutManager lm = getLayoutManager(); int headerHeight = lm.getOuterHeight(header); int footerHeight = lm.getOuterHeight(footer); return headerHeight + footerHeight; } + private LayoutManager getLayoutManager() { + return LayoutManager.get(client); + } + public int getMinWidth() { return MIN_CONTENT_AREA_WIDTH + getDecorationWidth(); } private int getDecorationWidth() { - LayoutManager layoutManager = layout.getLayoutManager(); + LayoutManager layoutManager = getLayoutManager(); return layoutManager.getOuterWidth(getElement()) - contentPanel.getElement().getOffsetWidth(); } diff --git a/client/src/com/vaadin/client/ui/window/WindowConnector.java b/client/src/com/vaadin/client/ui/window/WindowConnector.java index 4f1825e749..a2bac218f4 100644 --- a/client/src/com/vaadin/client/ui/window/WindowConnector.java +++ b/client/src/com/vaadin/client/ui/window/WindowConnector.java @@ -212,7 +212,6 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector @Override public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) { // We always have 1 child, unless the child is hidden - getWidget().layout = getContent(); getWidget().contentPanel.setWidget(getContentWidget()); } @@ -220,12 +219,13 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector public void layout() { LayoutManager lm = getLayoutManager(); VWindow window = getWidget(); - ComponentConnector layout = window.layout; + ComponentConnector content = getContent(); + boolean hasContent = (content != null); Element contentElement = window.contentPanel.getElement(); if (!minWidthChecked) { - boolean needsMinWidth = !isUndefinedWidth() - || layout.isRelativeWidth(); + boolean needsMinWidth = !isUndefinedWidth() || !hasContent + || content.isRelativeWidth(); int minWidth = window.getMinWidth(); if (needsMinWidth && lm.getInnerWidth(contentElement) < minWidth) { minWidthChecked = true; @@ -235,8 +235,8 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector minWidthChecked = true; } - boolean needsMinHeight = !isUndefinedHeight() - || layout.isRelativeHeight(); + boolean needsMinHeight = !isUndefinedHeight() || !hasContent + || content.isRelativeHeight(); int minHeight = window.getMinHeight(); if (needsMinHeight && lm.getInnerHeight(contentElement) < minHeight) { // Use minimum height if less than a certain size @@ -259,26 +259,29 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector * otherwise not take the scrollbar into account when calculating the * height. */ - Element layoutElement = layout.getWidget().getElement(); - Style childStyle = layoutElement.getStyle(); - if (layout.isRelativeHeight() && !BrowserInfo.get().isIE9()) { - childStyle.setPosition(Position.ABSOLUTE); - - Style wrapperStyle = contentElement.getStyle(); - if (window.getElement().getStyle().getWidth().length() == 0 - && !layout.isRelativeWidth()) { - /* - * Need to lock width to make undefined width work even with - * absolute positioning - */ - int contentWidth = lm.getOuterWidth(layoutElement); - wrapperStyle.setWidth(contentWidth, Unit.PX); + if (hasContent) { + Element layoutElement = content.getWidget().getElement(); + Style childStyle = layoutElement.getStyle(); + if (content.isRelativeHeight() && !BrowserInfo.get().isIE9()) { + childStyle.setPosition(Position.ABSOLUTE); + + Style wrapperStyle = contentElement.getStyle(); + if (window.getElement().getStyle().getWidth().length() == 0 + && !content.isRelativeWidth()) { + /* + * Need to lock width to make undefined width work even with + * absolute positioning + */ + int contentWidth = lm.getOuterWidth(layoutElement); + wrapperStyle.setWidth(contentWidth, Unit.PX); + } else { + wrapperStyle.clearWidth(); + } } else { - wrapperStyle.clearWidth(); + childStyle.clearPosition(); } - } else { - childStyle.clearPosition(); } + } @Override |