// 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);
}
}
// this is a subwindow
componentsRoot = (Window) componentsRoot.getParent();
}
- if (componentsRoot != w
- || dirtyPaintabletSet.contains(component
- .getParent())) {
+ if (componentsRoot != w) {
resultset.remove(p);
}
}
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;
private boolean cacheEnabled = false;
+ private Collection paintedComponents = new HashSet();
+
/**
* Creates a new XMLPrintWriter, without automatic line flushing.
*
final String id = manager.getPaintableId(paintable);
paintable.addListener(manager);
addAttribute("id", id);
+ paintedComponents.add(paintable);
return cacheEnabled && isPreviouslyPainted;
}
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;
+ }
+ }
}