summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-11-29 13:40:41 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-11-29 13:40:41 +0000
commitca6be384ea34fb6e79f82086cc0edbf97c4be648 (patch)
treed95b1013814568b025f2da2466ceae6edf093391 /src/com
parent550643bcb29bdfcfca5d0ab2fc628fd360848f2a (diff)
downloadvaadin-framework-ca6be384ea34fb6e79f82086cc0edbf97c4be648.tar.gz
vaadin-framework-ca6be384ea34fb6e79f82086cc0edbf97c4be648.zip
added check not to paint components not attached to application
svn changeset:3039/svn branch:trunk
Diffstat (limited to 'src/com')
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java25
1 files 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);
+ }
}
}
}