diff options
Diffstat (limited to 'src/quicktemplates2/qquickswipeview.cpp')
-rw-r--r-- | src/quicktemplates2/qquickswipeview.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/quicktemplates2/qquickswipeview.cpp b/src/quicktemplates2/qquickswipeview.cpp index 3be41751..45d3b15a 100644 --- a/src/quicktemplates2/qquickswipeview.cpp +++ b/src/quicktemplates2/qquickswipeview.cpp @@ -192,6 +192,7 @@ public: void itemChildAdded(QQuickItem *, QQuickItem *) override; void itemChildRemoved(QQuickItem *, QQuickItem *) override; void itemParentChanged(QQuickItem *, QQuickItem *) override; + void itemDestroyed(QQuickItem *) 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 |