summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qeventdispatcher_win.cpp
diff options
context:
space:
mode:
authorAlex Trotsenko <alex1973tr@gmail.com>2020-08-18 15:07:38 +0300
committerAlex Trotsenko <alex1973tr@gmail.com>2020-08-26 11:08:15 +0300
commitfe4b246446f721085946e399b96a42eccfcecca8 (patch)
treefebdd856dfafc56530b5dfb132aad5c1deba474b /src/corelib/kernel/qeventdispatcher_win.cpp
parent5449bddb045519acc49dc2171938526457055c95 (diff)
Synchronize QEventDispatcherWin32::processEvents() with QCoreApplication
QCoreApplication has a special internal mechanism to control whether the event dispatcher should block after delivering the posted events. To handle queued connections in nested loops properly, we should use that functionality. Pick-to: 5.15 Fixes: QTBUG-85981 Change-Id: I124179a23b26a995cf95ed379e97bfa62c95f42a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_win.cpp')
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index 7e6d478473..b3ae226e58 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -529,6 +529,7 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
// QCoreApplication::sendPostedEvents() takes care about recursions.
sendPostedEvents();
+ auto threadData = d->threadData.loadRelaxed();
bool canWait;
bool retVal = false;
do {
@@ -599,7 +600,8 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
// wait for message
canWait = (!retVal
&& !d->interrupt.loadRelaxed()
- && (flags & QEventLoop::WaitForMoreEvents));
+ && flags.testFlag(QEventLoop::WaitForMoreEvents)
+ && threadData->canWaitLocked());
if (canWait) {
emit aboutToBlock();
MsgWaitForMultipleObjectsEx(0, NULL, INFINITE, QS_ALLINPUT, MWMO_ALERTABLE | MWMO_INPUTAVAILABLE);