diff options
author | Fabian Bumberger <fbumberger@rim.com> | 2014-01-29 14:11:51 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-15 09:50:03 +0100 |
commit | 01e609e9fa0ca1317e0f4eff4802a79584450357 (patch) | |
tree | 8fd4d60652b413f2faa3a67d08f57ed98706db50 | |
parent | 093fe73f915dbd2554fa4e109bfda59eeecb9a17 (diff) |
Fix polishItems bug
updatePolish is not called for items which are not visible.
However if a polish is scheduled, updatePolish has to be called when the item
becomes eventually visible.
This patch makes sure, that invisible items are not removed from the itemsToPolish list.
Change-Id: I1ad929dc6de8e61edbd1c4df88ae5bc951979ff1
Reviewed-by: Ulf Hermann <ulf.hermann@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 3828c89dbf..2e74c59c20 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -246,23 +246,27 @@ void QQuickWindow::focusInEvent(QFocusEvent *ev) d->updateFocusItemTransform(); } - void QQuickWindowPrivate::polishItems() { int maxPolishCycles = 100000; - while (!itemsToPolish.isEmpty() && --maxPolishCycles > 0) { + int removedItems; + do { + removedItems = 0; QSet<QQuickItem *> itms = itemsToPolish; - itemsToPolish.clear(); for (QSet<QQuickItem *>::iterator it = itms.begin(); it != itms.end(); ++it) { QQuickItem *item = *it; QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item); - itemPrivate->polishScheduled = false; - if (item->isVisible() || (itemPrivate->extra.isAllocated() && itemPrivate->extra->effectRefCount>0)) + + if (item->isVisible() || (itemPrivate->extra.isAllocated() && itemPrivate->extra->effectRefCount>0)) { + itemPrivate->polishScheduled = false; + itemsToPolish.remove(item); item->updatePolish(); + ++removedItems; + } } - } + } while (removedItems > 0 && --maxPolishCycles > 0); if (maxPolishCycles == 0) qWarning("QQuickWindow: possible QQuickItem::polish() loop"); |