aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--src/quick/util/qquickanimation.cpp16
-rw-r--r--src/quick/util/qquickbehavior.cpp19
2 files changed, 16 insertions, 19 deletions
diff --git a/src/quick/util/qquickanimation.cpp b/src/quick/util/qquickanimation.cpp
index bfdc863d10..f2ee096af7 100644
--- a/src/quick/util/qquickanimation.cpp
+++ b/src/quick/util/qquickanimation.cpp
@@ -165,17 +165,15 @@ void QQuickAbstractAnimationPrivate::commence()
QQuickStateActions actions;
QQmlProperties properties;
- QAbstractAnimationJob *oldInstance = animationInstance;
- animationInstance = q->transition(actions, properties, QQuickAbstractAnimation::Forward);
- if (oldInstance && oldInstance != animationInstance)
- delete oldInstance;
+ auto *newInstance = q->transition(actions, properties, QQuickAbstractAnimation::Forward);
+ Q_ASSERT(newInstance != animationInstance);
+ delete animationInstance;
+ animationInstance = newInstance;
if (animationInstance) {
- if (oldInstance != animationInstance) {
- if (q->threadingModel() == QQuickAbstractAnimation::RenderThread)
- animationInstance = new QQuickAnimatorProxyJob(animationInstance, q);
- animationInstance->addAnimationChangeListener(this, QAbstractAnimationJob::Completion);
- }
+ if (q->threadingModel() == QQuickAbstractAnimation::RenderThread)
+ animationInstance = new QQuickAnimatorProxyJob(animationInstance, q);
+ animationInstance->addAnimationChangeListener(this, QAbstractAnimationJob::Completion);
emit q->started();
animationInstance->start();
}
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);
}