aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickcanvas.cpp
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@nokia.com>2012-05-03 15:48:53 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-03 18:48:15 +0200
commit50523a21c960bb59405ec0ae0a9f313eefec5327 (patch)
treee4d59e14f08aaf75a6ca5726fa404c7bf29e0d4b /src/quick/items/qquickcanvas.cpp
parentc79ad1f30fd2e681ba0cad5b7f2da87880c6599e (diff)
Keep polishing until there is nothing left to polish.
Some items will trigger changes in updatePolish() which again trigger property changes which needs polish to be executed again. If we do not polish until the set is fully cleared, we will end up with some items being in an unpolished state. To avoid polishing from going on indefinitely, we have a countdown that spits out a warning if polishing goes on forever. Change-Id: I4da6e884ca0d52b9b2701082ecf13e8c65508524 Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/quick/items/qquickcanvas.cpp')
-rw-r--r--src/quick/items/qquickcanvas.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp
index a6905b55aa..9a9a70bc5e 100644
--- a/src/quick/items/qquickcanvas.cpp
+++ b/src/quick/items/qquickcanvas.cpp
@@ -211,14 +211,22 @@ void QQuickCanvas::focusInEvent(QFocusEvent *)
void QQuickCanvasPrivate::polishItems()
{
- QSet<QQuickItem *> itms = itemsToPolish;
- itemsToPolish.clear();
+ int maxPolishCycles = 100000;
- for (QSet<QQuickItem *>::iterator it = itms.begin(); it != itms.end(); ++it) {
- QQuickItem *item = *it;
- QQuickItemPrivate::get(item)->polishScheduled = false;
- item->updatePolish();
+ while (!itemsToPolish.isEmpty() && --maxPolishCycles > 0) {
+ QSet<QQuickItem *> itms = itemsToPolish;
+ itemsToPolish.clear();
+
+ for (QSet<QQuickItem *>::iterator it = itms.begin(); it != itms.end(); ++it) {
+ QQuickItem *item = *it;
+ QQuickItemPrivate::get(item)->polishScheduled = false;
+ item->updatePolish();
+ }
}
+
+ if (maxPolishCycles == 0)
+ qWarning("QQuickCanvas: possible QQuickItem::polish() loop");
+
updateFocusItemTransform();
}