aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-02-28 16:49:17 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-29 05:27:33 +0100
commit7002ef6142250cfd7edc81f739ddafee7e71bdbf (patch)
tree6a7bb8c1787bc1d3baeaad203e7bab946932e175
parent4e0e0e5cc59a0e5379dcc1964976288d3c3e1b82 (diff)
Make sure positioners remove change listeners for invisible items.
Children that are invisble weren't having their change listeners removed, which showed illegal accesses on destruction in valgrind. Change-Id: Icae798e773168323781e9ab88b3dae6a5aea0952 Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
-rw-r--r--src/quick/items/qquickpositioners.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp
index 77d2a360b8..95ee9bfb58 100644
--- a/src/quick/items/qquickpositioners.cpp
+++ b/src/quick/items/qquickpositioners.cpp
@@ -111,6 +111,8 @@ QQuickBasePositioner::~QQuickBasePositioner()
Q_D(QQuickBasePositioner);
for (int i = 0; i < positionedItems.count(); ++i)
d->unwatchChanges(positionedItems.at(i).item);
+ for (int i = 0; i < unpositionedItems.count(); ++i)
+ d->unwatchChanges(unpositionedItems.at(i).item);
positionedItems.clear();
}
@@ -187,6 +189,9 @@ void QQuickBasePositioner::itemChange(ItemChange change, const ItemChangeData &v
if (idx >= 0) {
d->unwatchChanges(child);
positionedItems.remove(idx);
+ } else if ((idx = unpositionedItems.find(posItem)) >= 0) {
+ d->unwatchChanges(child);
+ unpositionedItems.remove(idx);
}
d->setPositioningDirty();
}