diff options
| author | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-04-07 13:41:17 +0200 |
|---|---|---|
| committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-04-07 14:51:04 +0200 |
| commit | a4d1ed854d14f3f15218f6c9bc2ff190259a4d5a (patch) | |
| tree | cbdd1a610976562d33bb854658ec590af54dfb94 | |
| parent | 0c9fc20e7ff7b4ff0f15e0b2c071ea834625dce9 (diff) | |
Do not notify about property changes if the value hasn't changed
After 2ffb91ac592d69adf9458ac45074174537435918 we manually call notify()
for QObjectCompatProperties. Currently we always call it when setting
values to compat properties, even if the value hasn't actually changed.
Fixed to call notify() only if the value is being changed.
Task-number: QTBUG-85520
Change-Id: I385db84c4009c45406e204b96e0e37ce5fa8882b
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
| -rw-r--r-- | src/corelib/animation/qpauseanimation.cpp | 9 | ||||
| -rw-r--r-- | src/corelib/kernel/qtimer.cpp | 8 | ||||
| -rw-r--r-- | src/gui/image/qmovie.cpp | 8 |
3 files changed, 19 insertions, 6 deletions
diff --git a/src/corelib/animation/qpauseanimation.cpp b/src/corelib/animation/qpauseanimation.cpp index c2599da6921..04d8cca273b 100644 --- a/src/corelib/animation/qpauseanimation.cpp +++ b/src/corelib/animation/qpauseanimation.cpp @@ -129,8 +129,13 @@ void QPauseAnimation::setDuration(int msecs) return; } Q_D(QPauseAnimation); - d->duration.setValue(msecs); - d->duration.notify(); + + if (msecs != d->duration) { + d->duration = msecs; + d->duration.notify(); + } else { + d->duration.removeBindingUnlessInWrapper(); + } } QBindable<int> QPauseAnimation::bindableDuration() diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 0946e1af485..333e6c24ba5 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -257,9 +257,11 @@ void QTimer::start() void QTimer::start(int msec) { Q_D(QTimer); + const bool intervalChanged = msec != d->inter; d->inter.setValue(msec); start(); - d->inter.notify(); + if (intervalChanged) + d->inter.notify(); } @@ -753,6 +755,7 @@ QBindable<bool> QTimer::bindableSingleShot() void QTimer::setInterval(int msec) { Q_D(QTimer); + const bool intervalChanged = msec != d->inter; d->inter.setValue(msec); if (d->id != INV_TIMER) { // create new timer QObject::killTimer(d->id); // restart timer @@ -761,7 +764,8 @@ void QTimer::setInterval(int msec) // as timer state actually does not change } - d->inter.markDirty(); + if (intervalChanged) + d->inter.markDirty(); } int QTimer::interval() const diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index a293d358cf6..b00d3ff25c9 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -929,8 +929,12 @@ void QMovie::setSpeed(int percentSpeed) Q_D(QMovie); if (!d->speed && d->movieState == Running) d->nextImageTimer.start(nextFrameDelay()); - d->speed.setValue(percentSpeed); - d->speed.notify(); + if (percentSpeed != d->speed) { + d->speed = percentSpeed; + d->speed.notify(); + } else { + d->speed.removeBindingUnlessInWrapper(); + } } int QMovie::speed() const |
