diff options
4 files changed, 22 insertions, 3 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java index a39ce5e335..943c2e1967 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java @@ -315,4 +315,9 @@ public class WindowConnector extends AbstractComponentContainerConnector public WindowState getState() { return (WindowState) super.getState(); } + + @Override + protected WindowState createState() { + return GWT.create(WindowState.class); + } } diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java index 13bce26c12..ac0cc7c46d 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java @@ -1188,8 +1188,18 @@ public abstract class AbstractCommunicationManager implements } - private Iterable<Component> getChildComponents(HasComponents cc) { - if (cc instanceof Panel) { + public static Iterable<Component> getChildComponents(HasComponents cc) { + if (cc instanceof Root) { + Root root = (Root) cc; + List<Component> children = new ArrayList<Component>(); + if (root.getContent() != null) { + children.add(root.getContent()); + } + for (Window w : root.getWindows()) { + children.add(w); + } + return children; + } else if (cc instanceof Panel) { // This is so wrong.. (#2924) if (((Panel) cc).getContent() == null) { return Collections.emptyList(); diff --git a/src/com/vaadin/ui/DirtyConnectorTracker.java b/src/com/vaadin/ui/DirtyConnectorTracker.java index dc9c72ba0d..1225b5f84f 100644 --- a/src/com/vaadin/ui/DirtyConnectorTracker.java +++ b/src/com/vaadin/ui/DirtyConnectorTracker.java @@ -7,6 +7,7 @@ import java.util.logging.Logger; import com.vaadin.terminal.Paintable.RepaintRequestEvent; import com.vaadin.terminal.Paintable.RepaintRequestListener; +import com.vaadin.terminal.gwt.server.AbstractCommunicationManager; import com.vaadin.terminal.gwt.server.ClientConnector; /** @@ -103,7 +104,8 @@ public class DirtyConnectorTracker implements RepaintRequestListener { markDirty(c); if (c instanceof HasComponents) { HasComponents container = (HasComponents) c; - for (Component child : container) { + for (Component child : AbstractCommunicationManager + .getChildComponents(container)) { markComponentsDirtyRecursively(child); } } diff --git a/src/com/vaadin/ui/Panel.java b/src/com/vaadin/ui/Panel.java index b6c08da86c..4d8e5066a5 100644 --- a/src/com/vaadin/ui/Panel.java +++ b/src/com/vaadin/ui/Panel.java @@ -403,6 +403,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable, */ @Override public void attach() { + getRoot().componentAttached(this); // can't call parent here as this is Panels hierarchy is a hack requestRepaint(); if (content != null) { @@ -421,6 +422,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable, if (content != null) { content.detach(); } + getRoot().componentDetached(this); } /** |