aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-04-27 17:04:24 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-04-27 16:06:49 +0000
commit891afc345ba854414f5084b1b08eccb66eeaf54a (patch)
tree85142831e8abd0db3196fbdfd1bac1b59462c6ef /src/templates
parent4ee54811fbb55e776e5e866eecac4ac873f761ba (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.cpp19
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