]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1332
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 24 Jan 2008 11:28:20 +0000 (11:28 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 24 Jan 2008 11:28:20 +0000 (11:28 +0000)
svn changeset:3648/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java

index 816145f7710704bbe4bef17013134739e6f54633..2b45bafe3dddce375111e41edc2265b69386c58d 100644 (file)
@@ -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);
                     }
                 }
index 657d40451c4bcaf24ce17d9c0ffe724c56804b1b..4be9c1327fe02ec96171f5a932ef794f1160a332 100644 (file)
@@ -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;
+        }
+    }
 }