diff options
author | Martin Jones <martin.jones@nokia.com> | 2012-02-28 16:49:17 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-29 05:27:33 +0100 |
commit | 7002ef6142250cfd7edc81f739ddafee7e71bdbf (patch) | |
tree | 6a7bb8c1787bc1d3baeaad203e7bab946932e175 /src/quick/items/qquickpositioners.cpp | |
parent | 4e0e0e5cc59a0e5379dcc1964976288d3c3e1b82 (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.cpp | 5 |
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(); } |