diff options
author | Gunnar Sletta <gunnar.sletta@nokia.com> | 2012-05-03 15:48:53 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-03 18:48:15 +0200 |
commit | 50523a21c960bb59405ec0ae0a9f313eefec5327 (patch) | |
tree | e4d59e14f08aaf75a6ca5726fa404c7bf29e0d4b /src/quick/items/qquickcanvas.cpp | |
parent | c79ad1f30fd2e681ba0cad5b7f2da87880c6599e (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.cpp | 20 |
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(); } |