diff options
author | Charles Yin <charles.yin@nokia.com> | 2012-05-28 16:09:26 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-29 05:57:48 +0200 |
commit | c187ebb93167e69e9e157cb236ef16e39e1b2fb9 (patch) | |
tree | 13f25dddf8f5132a6b30d331f486ea99c3362000 /src/quick/util/qquickbehavior.cpp | |
parent | 0eec47c65982f586a8602af964b454494f0f49f3 (diff) |
Don't use deleted QQuickPathAnimationAnimator
1) If QQuickPathAnimationAnimator was deleted, just return 0 for transition
2) Add Null checking for all animation::transition() calls
Change-Id: I1248d08fe05da5c9ff58f7b812ff11545959032f
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/quick/util/qquickbehavior.cpp')
-rw-r--r-- | src/quick/util/qquickbehavior.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/quick/util/qquickbehavior.cpp b/src/quick/util/qquickbehavior.cpp index d201dfad66..1623a00a49 100644 --- a/src/quick/util/qquickbehavior.cpp +++ b/src/quick/util/qquickbehavior.cpp @@ -204,13 +204,15 @@ void QQuickBehavior::write(const QVariant &value) QList<QQmlProperty> after; QAbstractAnimationJob *prev = d->animationInstance; d->animationInstance = d->animation->transition(actions, after, QQuickAbstractAnimation::Forward); - if (d->animationInstance != prev) { - d->animationInstance->addAnimationChangeListener(d, QAbstractAnimationJob::StateChange); - if (prev) - delete prev; + if (prev && prev != d->animationInstance) + delete prev; + + if (d->animationInstance) { + if (d->animationInstance != prev) + d->animationInstance->addAnimationChangeListener(d, QAbstractAnimationJob::StateChange); + d->animationInstance->start(); + d->blockRunningChanged = false; } - d->animationInstance->start(); - d->blockRunningChanged = false; if (!after.contains(d->property)) QQmlPropertyPrivate::write(d->property, value, QQmlPropertyPrivate::BypassInterceptor | QQmlPropertyPrivate::DontRemoveBinding); } |