diff options
| author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2025-04-14 15:37:32 +0200 |
|---|---|---|
| committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2025-04-23 15:41:06 +0200 |
| commit | 2e6032188fee4430afbea377350c55dde46bfb43 (patch) | |
| tree | 102ac1399319b2fae1dec81f402570f04313762d /src/gui/kernel/qplatformwindow.cpp | |
| parent | 61be342d0293f03ea7174f44bf58950ef82f5d05 (diff) | |
Don't stop QPlaformWindow updateRequest timer until after delivery
Delivery of the update request may be circumvented temporarily by the
platform window, or the user may request another update during the
delivery, so wait to stop the timer until we know we don't need it
anymore.
Pick-to: 6.9 6.8
Fixes: QTBUG-135950
Change-Id: Ie6d1f0f726b66ab6a8036f281b46e525084d90e8
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/gui/kernel/qplatformwindow.cpp')
| -rw-r--r-- | src/gui/kernel/qplatformwindow.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index fff2709b89f..c32d753bebf 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -469,8 +469,13 @@ bool QPlatformWindow::windowEvent(QEvent *event) if (event->type() == QEvent::Timer) { if (static_cast<QTimerEvent *>(event)->timerId() == d->updateTimer.timerId()) { - d->updateTimer.stop(); deliverUpdateRequest(); + // Delivery of the update request may be circumvented temporarily by the + // platform window, or the user may request another update during the + // delivery, so wait to stop the timer until we know we don't need it + // anymore. + if (!hasPendingUpdateRequest()) + d->updateTimer.stop(); return true; } } @@ -770,7 +775,8 @@ void QPlatformWindow::requestUpdate() } } - Q_ASSERT(!d->updateTimer.isActive()); + // Start or restart the timer (in case we're called during update + // request delivery). d->updateTimer.start(updateInterval, Qt::PreciseTimer, window()); } |
