From: Marc Englund Date: Fri, 7 Mar 2008 14:03:56 +0000 (+0000) Subject: Mainwindow (and theoretically other windows) can now be changed; fixes #1450 X-Git-Tag: 6.7.0.beta1~4962 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5df00a4facff179a0c51b1a0d16b6a2d3d161770;p=vaadin-framework.git Mainwindow (and theoretically other windows) can now be changed; fixes #1450 svn changeset:4003/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java index 6e00355d6e..0b15fb6036 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java @@ -378,6 +378,16 @@ public class ApplicationConnection { } } + JSONObject meta = null; + if (((JSONObject) json).containsKey("meta")) { + meta = ((JSONObject) json).get("meta").isObject(); + if (meta.containsKey("repaintAll")) { + view.clear(); + idToPaintable.clear(); + paintableToId.clear(); + } + } + // Process changes final JSONArray changes = (JSONArray) ((JSONObject) json) .get("changes"); @@ -411,8 +421,7 @@ public class ApplicationConnection { } } - if (((JSONObject) json).containsKey("meta")) { - final JSONObject meta = ((JSONObject) json).get("meta").isObject(); + if (meta != null) { if (meta.containsKey("focus")) { final String focusPid = meta.get("focus").isString() .stringValue(); diff --git a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java index 6c90cd24fc..70e85f0e28 100644 --- a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java +++ b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java @@ -256,6 +256,13 @@ public class CommunicationManager implements Paintable.RepaintRequestListener { outWriter.print("\"changes\":["); + // re-get mainwindow - may have been changed + Window newWindow = getApplicationWindow(request, application); + if (newWindow != window) { + window = newWindow; + repaintAll = true; + } + JsonPaintTarget paintTarget = new JsonPaintTarget(this, outWriter, !repaintAll); @@ -347,7 +354,12 @@ public class CommunicationManager implements Paintable.RepaintRequestListener { outWriter.print("]"); // close changes outWriter.print(", \"meta\" : {"); - final boolean metaOpen = false; + boolean metaOpen = false; + + if (repaintAll) { + metaOpen = true; + outWriter.write("\"repaintAll\":true"); + } // add meta instruction for client to set focus if it is set final Paintable f = (Paintable) application.consumeFocus();