Fix QTimer::setInterval to remove existing bindings

A recent change ( a7ca8b1a2864e47cacd530f6b10d2b415c5193f7 )
led to failure of binding removal in setInterval().
This was fixed by introducing setterScope.
This patch add unit tests for this regression.

Change-Id: Ic8da1f2d82ad6c8ccd81c9b1eff72d42cf75f28a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
Andreas Buhr 2021-01-29 10:32:07 +01:00
parent 2fe6f551d9
commit 6bdffefaa8
2 changed files with 8 additions and 0 deletions

View File

@ -257,6 +257,7 @@ void QTimer::start()
void QTimer::start(int msec)
{
Q_D(QTimer);
d->inter.removeBindingUnlessInWrapper();
d->inter.setValueBypassingBindings(msec);
start();
d->inter.markDirty();
@ -753,6 +754,8 @@ QBindable<bool> QTimer::bindableSingleShot()
void QTimer::setInterval(int msec)
{
Q_D(QTimer);
d->inter.removeBindingUnlessInWrapper();
d->inter.setValueBypassingBindings(msec);
if (d->id != INV_TIMER) { // create new timer
QObject::killTimer(d->id); // restart timer
@ -760,6 +763,7 @@ void QTimer::setInterval(int msec)
// No need to call markDirty() for d->isActiveData here,
// as timer state actually does not change
}
d->inter.markDirty();
}

View File

@ -1158,6 +1158,10 @@ void tst_QTimer::bindTimer()
QCOMPARE(timer.interval(), 10);
interval = 100;
QCOMPARE(timer.interval(), 100);
timer.setInterval(50);
QCOMPARE(timer.interval(), 50);
interval = 30;
QCOMPARE(timer.interval(), 50);
// timerType property
QCOMPARE(timer.timerType(), Qt::CoarseTimer);