Revert "Cocoa: Don't stop NSApp when showing a modal dialog"

This reverts commit ff3dcc49c4.

The reverted commit is an incorrect bug-fix for a
regression introduced by adding a call to
[NSApp abortModal] in change d9875f7b.

Change-Id: I1307d1790ada740e0552d62267b6009cbccd6c4c
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
This commit is contained in:
Morten Johan Sørvig 2014-05-14 11:30:46 +02:00 committed by The Qt Project
parent 626e0f204e
commit 385ba9e7e3
2 changed files with 1 additions and 16 deletions

View File

@ -163,7 +163,6 @@ public:
// The following variables help organizing modal sessions:
QStack<QCocoaModalSessionInfo> cocoaModalSessionStack;
bool currentExecIsNSAppRun;
bool modalSessionOnNSAppRun;
bool nsAppRunCalledByQt;
bool cleanupModalSessionsNeeded;
uint processEventsCalled;

View File

@ -725,6 +725,7 @@ void QCocoaEventDispatcherPrivate::beginModalSession(QWindow *window)
// setting currentModalSessionCached to zero, so that interrupt() calls
// [NSApp abortModal] if another modal session is currently running
Q_Q(QCocoaEventDispatcher);
q->interrupt();
// Add a new, empty (null), NSModalSession to the stack.
// It will become active the next time QEventDispatcher::processEvents is called.
@ -737,12 +738,6 @@ void QCocoaEventDispatcherPrivate::beginModalSession(QWindow *window)
cocoaModalSessionStack.push(info);
updateChildrenWorksWhenModal();
currentModalSessionCached = 0;
if (currentExecIsNSAppRun) {
modalSessionOnNSAppRun = true;
q->wakeUp();
} else {
q->interrupt();
}
}
void QCocoaEventDispatcherPrivate::endModalSession(QWindow *window)
@ -781,7 +776,6 @@ QCocoaEventDispatcherPrivate::QCocoaEventDispatcherPrivate()
runLoopTimerRef(0),
blockSendPostedEvents(false),
currentExecIsNSAppRun(false),
modalSessionOnNSAppRun(false),
nsAppRunCalledByQt(false),
cleanupModalSessionsNeeded(false),
processEventsCalled(0),
@ -912,14 +906,6 @@ void QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void *info)
// processEvents() was called "manually," ignore this source for now
d->maybeCancelWaitForMoreEvents();
return;
} else if (d->modalSessionOnNSAppRun) {
// We're about to spawn the 1st modal session on top of the main runloop.
// Instead of calling processPostedEvents(), which would need us stop
// NSApp, we just re-enter processEvents(). This is equivalent to calling
// QDialog::exec() except that it's done in a non-blocking way.
d->modalSessionOnNSAppRun = false;
d->q_func()->processEvents(QEventLoop::DialogExec | QEventLoop::EventLoopExec | QEventLoop::WaitForMoreEvents);
return;
}
d->processPostedEvents();
d->maybeCancelWaitForMoreEvents();