From: Matti Tahvonen Date: Thu, 24 Jan 2008 11:28:20 +0000 (+0000) Subject: fixes #1332 X-Git-Tag: 6.7.0.beta1~5156 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3a91564c95324842e6796cacc79598657646e34d;p=vaadin-framework.git fixes #1332 svn changeset:3648/svn branch:trunk --- 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; + } + } }