aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickpositioners.cpp
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 /src/quick/items/qquickpositioners.cpp
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>
Diffstat (limited to 'src/quick/items/qquickpositioners.cpp')
-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();
}