diff options
Diffstat (limited to 'src/templates/qquickswipeview.cpp')
-rw-r--r-- | src/templates/qquickswipeview.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/templates/qquickswipeview.cpp b/src/templates/qquickswipeview.cpp index f807439b..7698f7cc 100644 --- a/src/templates/qquickswipeview.cpp +++ b/src/templates/qquickswipeview.cpp @@ -194,6 +194,7 @@ public: void itemChildAdded(QQuickItem *, QQuickItem *) Q_DECL_OVERRIDE; void itemChildRemoved(QQuickItem *, QQuickItem *) Q_DECL_OVERRIDE; void itemParentChanged(QQuickItem *, QQuickItem *) Q_DECL_OVERRIDE; + void itemDestroyed(QQuickItem *) Q_DECL_OVERRIDE; void updateIndex(); void updateIsCurrent(); @@ -309,20 +310,28 @@ void QQuickSwipeViewAttachedPrivate::itemParentChanged(QQuickItem *, QQuickItem updateView(parent); } +void QQuickSwipeViewAttachedPrivate::itemDestroyed(QQuickItem *item) +{ + QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Parent | QQuickItemPrivate::Destroyed); +} + QQuickSwipeViewAttached::QQuickSwipeViewAttached(QQuickItem *item) : QObject(*(new QQuickSwipeViewAttachedPrivate(item)), item) { Q_D(QQuickSwipeViewAttached); - if (item->parentItem()) { + if (item->parentItem()) d->updateView(item->parentItem()); - } else { - QQuickItemPrivate *p = QQuickItemPrivate::get(item); - p->addItemChangeListener(d, QQuickItemPrivate::Parent); - } + + QQuickItemPrivate *p = QQuickItemPrivate::get(item); + p->addItemChangeListener(d, QQuickItemPrivate::Parent | QQuickItemPrivate::Destroyed); } QQuickSwipeViewAttached::~QQuickSwipeViewAttached() { + Q_D(QQuickSwipeViewAttached); + QQuickItem *item = qobject_cast<QQuickItem *>(parent()); + if (item) + QQuickItemPrivate::get(item)->removeItemChangeListener(d, QQuickItemPrivate::Parent | QQuickItemPrivate::Destroyed); } QQuickSwipeView *QQuickSwipeViewAttached::view() const |