aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qquickbehavior.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-02-02 09:17:39 +0100
committerUlf Hermann <ulf.hermann@qt.io>2021-02-03 10:53:26 +0100
commit17fa564a94f98486ff41030c47629bd902c48e8d (patch)
tree74d5619d37c8c47b092e40f035e72579de77cc09 /src/quick/util/qquickbehavior.cpp
parent0deb3961e6b0a1f15a491f7a19085df3a7a506b1 (diff)
Animations: Drop checks for duplicate jobs
We cannot return the same job multiple times from transition(). The calling code takes ownership of the job, and even retaining a pointer to it in the animation would be a problem. There are no animations that return the same job multiple times, though. Task-number: QTBUG-90401 Change-Id: I3a113c624a20dceee745cd6a4fca6f3634bdbdd1 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/quick/util/qquickbehavior.cpp')
-rw-r--r--src/quick/util/qquickbehavior.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/quick/util/qquickbehavior.cpp b/src/quick/util/qquickbehavior.cpp
index ceda5589b2..70e283bdb0 100644
--- a/src/quick/util/qquickbehavior.cpp
+++ b/src/quick/util/qquickbehavior.cpp
@@ -308,21 +308,20 @@ void QQuickBehavior::write(const QVariant &value)
actions << action;
QList<QQmlProperty> after;
- QAbstractAnimationJob *prev = d->animationInstance;
- d->animationInstance = d->animation->transition(actions, after, QQuickAbstractAnimation::Forward);
-
- if (d->animationInstance && d->animation->threadingModel() == QQuickAbstractAnimation::RenderThread)
- d->animationInstance = new QQuickAnimatorProxyJob(d->animationInstance, d->animation);
-
- if (prev && prev != d->animationInstance)
- delete prev;
+ auto *newInstance = d->animation->transition(actions, after, QQuickAbstractAnimation::Forward);
+ Q_ASSERT(newInstance != d->animationInstance);
+ delete d->animationInstance;
+ d->animationInstance = newInstance;
if (d->animationInstance) {
- if (d->animationInstance != prev)
- d->animationInstance->addAnimationChangeListener(d, QAbstractAnimationJob::StateChange);
+ if (d->animation->threadingModel() == QQuickAbstractAnimation::RenderThread)
+ d->animationInstance = new QQuickAnimatorProxyJob(d->animationInstance, d->animation);
+
+ d->animationInstance->addAnimationChangeListener(d, QAbstractAnimationJob::StateChange);
d->animationInstance->start();
d->blockRunningChanged = false;
}
+
if (!after.contains(d->property))
QQmlPropertyPrivate::write(d->property, value, QQmlPropertyData::BypassInterceptor | QQmlPropertyData::DontRemoveBinding);
}