From 06cec0646c63bdf0d9859f8650e47a8382cea12a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 14 Apr 2025 15:37:32 +0200 Subject: [PATCH] Don't stop QPlaformWindow updateRequest timer until after delivery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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.8 Fixes: QTBUG-135950 Change-Id: Ie6d1f0f726b66ab6a8036f281b46e525084d90e8 Reviewed-by: Morten Johan Sørvig (cherry picked from commit 2e6032188fee4430afbea377350c55dde46bfb43) Reviewed-by: Qt Cherry-pick Bot --- src/gui/kernel/qplatformwindow.cpp | 10 ++++++++-- 1 file 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(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()); }