diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-04-27 17:04:24 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-04-27 16:06:49 +0000 |
commit | 891afc345ba854414f5084b1b08eccb66eeaf54a (patch) | |
tree | 85142831e8abd0db3196fbdfd1bac1b59462c6ef /src/templates | |
parent | 4ee54811fbb55e776e5e866eecac4ac873f761ba (diff) |
QQuickSwipeViewAttached: remove danling item change listener
Change-Id: I40d3b50153bead01150284b2a5c3f45dbe486462
Task-number: QTBUG-52731
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src/templates')
-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 |