aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java32
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java18
2 files changed, 34 insertions, 16 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
index 816145f771..2b45bafe3d 100644
--- a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
+++ b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
@@ -329,20 +329,22 @@ public class CommunicationManager implements Paintable.RepaintRequestListener,
// TODO we may still get changes that have been
// rendered already (changes with only cached flag)
- paintTarget.startTag("change");
- paintTarget.addAttribute("format", "uidl");
- final String pid = getPaintableId(p);
- paintTarget.addAttribute("pid", pid);
-
- // Track paints to identify empty paints
- paintTarget.setTrackPaints(true);
- p.paint(paintTarget);
-
- // If no paints add attribute empty
- if (paintTarget.getNumberOfPaints() <= 0) {
- paintTarget.addAttribute("visible", false);
+ if (!paintTarget.isAlreadyPainted(p)) {
+ paintTarget.startTag("change");
+ paintTarget.addAttribute("format", "uidl");
+ final String pid = getPaintableId(p);
+ paintTarget.addAttribute("pid", pid);
+
+ // Track paints to identify empty paints
+ paintTarget.setTrackPaints(true);
+ p.paint(paintTarget);
+
+ // If no paints add attribute empty
+ if (paintTarget.getNumberOfPaints() <= 0) {
+ paintTarget.addAttribute("visible", false);
+ }
+ paintTarget.endTag("change");
}
- paintTarget.endTag("change");
paintablePainted(p);
}
}
@@ -803,9 +805,7 @@ public class CommunicationManager implements Paintable.RepaintRequestListener,
// this is a subwindow
componentsRoot = (Window) componentsRoot.getParent();
}
- if (componentsRoot != w
- || dirtyPaintabletSet.contains(component
- .getParent())) {
+ if (componentsRoot != w) {
resultset.remove(p);
}
}
diff --git a/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java b/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
index 657d40451c..4be9c1327f 100644
--- a/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
+++ b/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
@@ -5,6 +5,7 @@
package com.itmill.toolkit.terminal.gwt.server;
import java.io.PrintWriter;
+import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@@ -61,6 +62,8 @@ public class JsonPaintTarget implements PaintTarget {
private boolean cacheEnabled = false;
+ private Collection paintedComponents = new HashSet();
+
/**
* Creates a new XMLPrintWriter, without automatic line flushing.
*
@@ -775,6 +778,7 @@ public class JsonPaintTarget implements PaintTarget {
final String id = manager.getPaintableId(paintable);
paintable.addListener(manager);
addAttribute("id", id);
+ paintedComponents.add(paintable);
return cacheEnabled && isPreviouslyPainted;
}
@@ -1091,4 +1095,18 @@ public class JsonPaintTarget implements PaintTarget {
public void setPreCachedResources(Set preCachedResources) {
throw new UnsupportedOperationException();
}
+
+ /**
+ * Method to check if paintable is already painted into this target.
+ *
+ * @param p
+ * @return true if already painted
+ */
+ public boolean isAlreadyPainted(Paintable p) {
+ if (paintedComponents.contains(p)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
}