From bb7a6e90375f4f546d1d5dc899e972d9389c2936 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Wed, 16 Dec 2009 14:51:33 +0100 Subject: Fix bug in positioners where changes were not being watched Task-number: QT-2638 --- .../graphicsitems/qmlgraphicspositioners.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp index b96b8b8..9f6baae 100644 --- a/src/declarative/graphicsitems/qmlgraphicspositioners.cpp +++ b/src/declarative/graphicsitems/qmlgraphicspositioners.cpp @@ -173,8 +173,20 @@ void QmlGraphicsBasePositioner::componentComplete() QVariant QmlGraphicsBasePositioner::itemChange(GraphicsItemChange change, const QVariant &value) { - if (change == ItemChildAddedChange || - change == ItemChildRemovedChange) { + Q_D(QmlGraphicsBasePositioner); + if (change == ItemChildAddedChange){ + QmlGraphicsItem* child = value.value(); + if(!child) + return QVariant(); + if(!d->watched.contains(child)) + d->watchChanges(child); + prePositioning(); + }else if (change == ItemChildRemovedChange) { + QmlGraphicsItem* child = value.value(); + if(!child) + return QVariant(); + if(d->watched.contains(child)) + d->unwatchChanges(child); prePositioning(); } @@ -212,10 +224,8 @@ void QmlGraphicsBasePositioner::prePositioning() //Assumed that (aside from init) every add/remove triggers this check //thus the above check will be triggered every time an item is removed QSet deletedItems = d->items - positionedItems.toSet(); - foreach(QmlGraphicsItem *child, deletedItems){ - d->unwatchChanges(child); + foreach(QmlGraphicsItem *child, deletedItems) d->items -= child; - } } doPositioning(); if(d->addTransition || d->moveTransition) -- cgit v0.12