aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates/qquickswipeview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/templates/qquickswipeview.cpp')
-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