From 4eab1984cebe9972283e88e7b91f763636e17c47 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 8 Mar 2012 17:05:07 +1000 Subject: Reset transitioner pointer when transition job finishes A transition job should only keep a reference to the transitioner for the lifetime of the transition. Change-Id: I22564d7b6587fed58ef53fd50ad4a700340dc7a4 Reviewed-by: Martin Jones Reviewed-by: Martin Jones --- src/quick/items/qquickitemviewtransition.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/quick/items/qquickitemviewtransition.cpp') diff --git a/src/quick/items/qquickitemviewtransition.cpp b/src/quick/items/qquickitemviewtransition.cpp index 5669ef927e..2134c8eca8 100644 --- a/src/quick/items/qquickitemviewtransition.cpp +++ b/src/quick/items/qquickitemviewtransition.cpp @@ -62,6 +62,7 @@ public: QPointF m_toPos; QQuickItemViewTransitioner::TransitionType m_type; bool m_isTarget; + bool *m_wasDeleted; protected: virtual void finished(); @@ -73,11 +74,14 @@ QQuickItemViewTransitionJob::QQuickItemViewTransitionJob() , m_item(0) , m_type(QQuickItemViewTransitioner::NoTransition) , m_isTarget(false) + , m_wasDeleted(0) { } QQuickItemViewTransitionJob::~QQuickItemViewTransitionJob() { + if (m_wasDeleted) + *m_wasDeleted = true; if (m_transitioner) m_transitioner->runningJobs.remove(this); } @@ -134,8 +138,16 @@ void QQuickItemViewTransitionJob::finished() { QQuickTransitionManager::finished(); - if (m_transitioner) + if (m_transitioner) { + bool deleted = false; + m_wasDeleted = &deleted; m_transitioner->finishedTransition(this, m_item); + if (deleted) + return; + m_wasDeleted = 0; + + m_transitioner = 0; + } m_item = 0; m_toPos.setX(0); -- cgit v1.2.3