From ca6be384ea34fb6e79f82086cc0edbf97c4be648 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Thu, 29 Nov 2007 13:40:41 +0000 Subject: [PATCH] added check not to paint components not attached to application svn changeset:3039/svn branch:trunk --- .../gwt/server/CommunicationManager.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java index 25a5f404d8..f72a655996 100644 --- a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java +++ b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java @@ -455,6 +455,8 @@ public class CommunicationManager implements Paintable.RepaintRequestListener, } catch (Throwable e) { e.printStackTrace(); // Writes the error report to client + // FIXME breaks UIDL response, security shouldn't reveal stack trace + // to client side OutputStreamWriter w = new OutputStreamWriter(out); PrintWriter err = new PrintWriter(w); err @@ -846,7 +848,7 @@ public class CommunicationManager implements Paintable.RepaintRequestListener, /** * @param w - * main window for which dirty components is to be fetched + * root window for which dirty components is to be fetched * @return */ public synchronized Set getDirtyComponents(Window w) { @@ -863,14 +865,21 @@ public class CommunicationManager implements Paintable.RepaintRequestListener, Paintable p = (Paintable) i.next(); if (p instanceof Component) { Component component = (Component) p; - Window componentsRoot = component.getWindow(); - if (componentsRoot.getParent() != null) { - // this is a subwindow - componentsRoot = (Window) componentsRoot.getParent(); - } - if (componentsRoot != w - || dirtyPaintabletSet.contains(component.getParent())) { + if (component.getApplication() == null) { + // component is detached after requestRepaint is called resultset.remove(p); + i.remove(); + } else { + Window componentsRoot = component.getWindow(); + if (componentsRoot.getParent() != null) { + // this is a subwindow + componentsRoot = (Window) componentsRoot.getParent(); + } + if (componentsRoot != w + || dirtyPaintabletSet.contains(component + .getParent())) { + resultset.remove(p); + } } } } -- 2.39.5