diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-11-02 09:48:57 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-12-11 10:21:45 +0000 |
commit | 53d3a0779663285baaaf13a05afc4a7d11f6ed29 (patch) | |
tree | c2e9f7ca9ca865c15f7df6888b157ac12238d963 /src/quick/util/qquicktransition_p.h | |
parent | 894211971ebf8b53ed3a78d771764021f7de2de6 (diff) |
Make deletion of transitions safe
Task-number: QTBUG-63844
Change-Id: I65029e9039ea3db85152fc3cdefaac3deee0db6c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/quick/util/qquicktransition_p.h')
-rw-r--r-- | src/quick/util/qquicktransition_p.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/quick/util/qquicktransition_p.h b/src/quick/util/qquicktransition_p.h index d6f365f99e..6d2e41fc9d 100644 --- a/src/quick/util/qquicktransition_p.h +++ b/src/quick/util/qquicktransition_p.h @@ -53,6 +53,7 @@ #include "qquickstate_p.h" #include <private/qabstractanimationjob_p.h> +#include <private/qqmlguard_p.h> #include <qqml.h> #include <QtCore/qobject.h> @@ -64,10 +65,10 @@ class QQuickTransitionPrivate; class QQuickTransitionManager; class QQuickTransition; -class QQuickTransitionInstance +class QQuickTransitionInstance : QAnimationJobChangeListener { public: - QQuickTransitionInstance(QQuickTransitionPrivate *transition, QAbstractAnimationJob *anim); + QQuickTransitionInstance(QQuickTransition *transition, QAbstractAnimationJob *anim); ~QQuickTransitionInstance(); void start(); @@ -75,8 +76,16 @@ public: bool isRunning() const; +protected: + void animationStateChanged(QAbstractAnimationJob *, QAbstractAnimationJob::State, QAbstractAnimationJob::State) override; + + void removeStateChangeListener() + { + m_anim->removeAnimationChangeListener(this, QAbstractAnimationJob::StateChange); + } + private: - QQuickTransitionPrivate *m_transition; + QQmlGuard<QQuickTransition> m_transition; QAbstractAnimationJob *m_anim; friend class QQuickTransition; }; |