diff options
Diffstat (limited to 'src/quick/util/qquickanimation.cpp')
-rw-r--r-- | src/quick/util/qquickanimation.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/quick/util/qquickanimation.cpp b/src/quick/util/qquickanimation.cpp index c04018c794..bc39355a48 100644 --- a/src/quick/util/qquickanimation.cpp +++ b/src/quick/util/qquickanimation.cpp @@ -164,15 +164,17 @@ void QQuickAbstractAnimationPrivate::commence() QAbstractAnimationJob *oldInstance = animationInstance; animationInstance = q->transition(actions, properties, QQuickAbstractAnimation::Forward); - if (oldInstance != animationInstance) { - animationInstance->addAnimationChangeListener(this, QAbstractAnimationJob::Completion); - if (oldInstance) - delete oldInstance; - } - animationInstance->start(); - if (animationInstance->isStopped()) { - running = false; - emit q->completed(); + if (oldInstance && oldInstance != animationInstance) + delete oldInstance; + + if (animationInstance) { + if (oldInstance != animationInstance) + animationInstance->addAnimationChangeListener(this, QAbstractAnimationJob::Completion); + animationInstance->start(); + if (animationInstance->isStopped()) { + running = false; + emit q->completed(); + } } } @@ -1693,7 +1695,8 @@ QAbstractAnimationJob* QQuickSequentialAnimation::transition(QQuickStateActions if (valid) d->animations.at(ii)->setDefaultTarget(d->defaultProperty); anim = d->animations.at(ii)->transition(actions, modified, direction, defaultTarget); - inc == -1 ? ag->prependAnimation(anim) : ag->appendAnimation(anim); + if (anim) + inc == -1 ? ag->prependAnimation(anim) : ag->appendAnimation(anim); } return initInstance(ag); @@ -1752,7 +1755,8 @@ QAbstractAnimationJob* QQuickParallelAnimation::transition(QQuickStateActions &a if (valid) d->animations.at(ii)->setDefaultTarget(d->defaultProperty); anim = d->animations.at(ii)->transition(actions, modified, direction, defaultTarget); - ag->appendAnimation(anim); + if (anim) + ag->appendAnimation(anim); } return initInstance(ag); } |