aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2012-03-27 12:19:40 +0300
committerArtur Signell <artur@vaadin.com>2012-03-27 17:31:46 +0300
commit873650ce5b609ca16d59d6d3350a6a96aedc3dcf (patch)
treec29cf9b4a4524fdba5345fea00a8106678eadf53
parentc7f7d882ca2ce051fe8121bb97abd1287797c665 (diff)
downloadvaadin-framework-873650ce5b609ca16d59d6d3350a6a96aedc3dcf.tar.gz
vaadin-framework-873650ce5b609ca16d59d6d3350a6a96aedc3dcf.zip
Do not decide window order in VWindow constructor as the widgets are
constructed in random order
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/RootConnector.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VWindow.java20
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java9
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();
+ }
}