From 8cdab74082019c0b8a57883a11aa5093a644abdd Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 25 Jan 2010 15:22:11 +0100 Subject: Qt/Cocoa Event Dispatcher Problem in modal dialogs The problem is that we didn't check if the event dispatcher was interrupted before starting to wait for more events. This patch will do the interrupt test after processing modal session events, and just before starting to wait. This will fix applications that expects e.g an event loop to exit immidiatly upon a signal from a timer (without the need for the user to generate e.g. a mouse event to stop the wait). Task-number: QTBUG-7503 Reviewed-by: cduclos --- src/gui/kernel/qeventdispatcher_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index eda75db..c7c7caf 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -569,7 +569,7 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags) // in cocoa. [NSApp run] should be called at least once for any cocoa app. if (NSModalSession session = d->currentModalSession()) { QBoolBlocker execGuard(d->currentExecIsNSAppRun, false); - while (!d->interrupt && [NSApp runModalSession:session] == NSRunContinuesResponse) + while ([NSApp runModalSession:session] == NSRunContinuesResponse && !d->interrupt) qt_mac_waitForMoreModalSessionEvents(); if (!d->interrupt && session == d->currentModalSessionCached) { // INVARIANT: Someone called e.g. [NSApp stopModal:] from outside the event -- cgit v0.12