aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2014-01-29 14:11:51 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-15 09:50:03 +0100
commit01e609e9fa0ca1317e0f4eff4802a79584450357 (patch)
tree8fd4d60652b413f2faa3a67d08f57ed98706db50
parent093fe73f915dbd2554fa4e109bfda59eeecb9a17 (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.cpp16
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");