diff options
author | Artur Signell <artur@vaadin.com> | 2012-03-27 12:19:40 +0300 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2012-03-27 17:31:46 +0300 |
commit | 873650ce5b609ca16d59d6d3350a6a96aedc3dcf (patch) | |
tree | c29cf9b4a4524fdba5345fea00a8106678eadf53 | |
parent | c7f7d882ca2ce051fe8121bb97abd1287797c665 (diff) | |
download | vaadin-framework-873650ce5b609ca16d59d6d3350a6a96aedc3dcf.tar.gz vaadin-framework-873650ce5b609ca16d59d6d3350a6a96aedc3dcf.zip |
Do not decide window order in VWindow constructor as the widgets are
constructed in random order
3 files changed, 35 insertions, 5 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java index 591e614b71..fdf1d09175 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java @@ -23,6 +23,7 @@ import com.google.gwt.user.client.ui.Widget; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.BrowserInfo; import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent; import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.Focusable; import com.vaadin.terminal.gwt.client.UIDL; @@ -350,4 +351,14 @@ public class RootConnector extends AbstractComponentContainerConnector return getWidget().subWindows.contains(wc.getWidget()); } + @Override + public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event) { + super.connectorHierarchyChanged(event); + for (ComponentConnector c : getChildren()) { + if (c instanceof WindowConnector) { + WindowConnector wc = (WindowConnector) c; + wc.setWindowOrderAndPosition(); + } + } + } } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VWindow.java b/src/com/vaadin/terminal/gwt/client/ui/VWindow.java index 88c11c3a89..06f928168e 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VWindow.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VWindow.java @@ -150,12 +150,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, // Different style of shadow for windows setShadowStyle("window"); - final int order = windowOrder.size(); - setWindowOrder(order); - windowOrder.add(this); constructDOM(); - setPopupPosition(order * STACKING_OFFSET_PIXELS, order - * STACKING_OFFSET_PIXELS); contentPanel.addScrollHandler(this); contentPanel.addKeyDownHandler(this); contentPanel.addFocusHandler(this); @@ -182,6 +177,21 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner, return windowOrder.get(windowOrder.size() - 1).equals(this); } + void setWindowOrderAndPosition() { + // This cannot be done in the constructor as the widgets are created in + // a different order than on they should appear on screen + if (windowOrder.contains(this)) { + // Already set + return; + } + final int order = windowOrder.size(); + setWindowOrder(order); + windowOrder.add(this); + setPopupPosition(order * STACKING_OFFSET_PIXELS, order + * STACKING_OFFSET_PIXELS); + + } + private void setWindowOrder(int order) { setZIndex(order + Z_INDEX); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java index c963b08772..8ebc0b9c2f 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java @@ -320,4 +320,13 @@ public class WindowConnector extends AbstractComponentContainerConnector protected WindowState createState() { return GWT.create(WindowState.class); } + + /** + * Gives the WindowConnector an order number. As a side effect, moves the + * window according to its order number so the windows are stacked. This + * method should be called for each window in the order they should appear. + */ + public void setWindowOrderAndPosition() { + getWidget().setWindowOrderAndPosition(); + } } |