Don't initiate delegate incubation in delegate creation frames.
authorMartin Jones <martin.jones@nokia.com>
Wed, 18 Apr 2012 08:25:16 +0000 (18:25 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 20 Apr 2012 00:26:23 +0000 (02:26 +0200)
If we've just instantiated a synchronous delegate, don't schedule
a buffered delegate until the next frame.

Change-Id: Id269457cb74a7900e4405022c15148fd2a3dc180
Reviewed-by: Bea Lam <bea.lam@nokia.com>
src/quick/items/qquickitemview.cpp

index e70e923..95c7ed5 100644 (file)
@@ -1659,12 +1659,19 @@ void QQuickItemViewPrivate::refill(qreal from, qreal to)
     bool added = addVisibleItems(fillFrom, fillTo, false);
     bool removed = removeNonVisibleItems(bufferFrom, bufferTo);
 
-    if (buffer && bufferMode != NoBuffer) {
-        if (bufferMode & BufferAfter)
-            fillTo = bufferTo;
-        if (bufferMode & BufferBefore)
-            fillFrom = bufferFrom;
-        added |= addVisibleItems(fillFrom, fillTo, true);
+    if (requestedIndex == -1 && buffer && bufferMode != NoBuffer) {
+        if (added) {
+            // We've already created a new delegate this frame.
+            // Just schedule a buffer refill.
+            fillCacheBuffer = true;
+            q->polish();
+        } else {
+            if (bufferMode & BufferAfter)
+                fillTo = bufferTo;
+            if (bufferMode & BufferBefore)
+                fillFrom = bufferFrom;
+            added |= addVisibleItems(fillFrom, fillTo, true);
+        }
     }
 
     if (added || removed) {