Revert "Cocoa: Post event to "show()" a modal window"
This reverts commita9cbddf473
. The reverted commit is an incorrect bug-fix for a regression introduced by adding a call to [NSApp abortModal] in changed9875f7b
. Change-Id: If23463ebdfe2ff64c68739dbece73a13773683c9 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
This commit is contained in:
parent
1d58face30
commit
626e0f204e
@ -134,8 +134,6 @@ public:
|
||||
void interrupt();
|
||||
void flush();
|
||||
|
||||
bool event(QEvent *);
|
||||
|
||||
friend void qt_mac_maybeCancelWaitForMoreEventsForwarder(QAbstractEventDispatcher *eventDispatcher);
|
||||
};
|
||||
|
||||
@ -165,6 +163,7 @@ public:
|
||||
// The following variables help organizing modal sessions:
|
||||
QStack<QCocoaModalSessionInfo> cocoaModalSessionStack;
|
||||
bool currentExecIsNSAppRun;
|
||||
bool modalSessionOnNSAppRun;
|
||||
bool nsAppRunCalledByQt;
|
||||
bool cleanupModalSessionsNeeded;
|
||||
uint processEventsCalled;
|
||||
|
@ -738,25 +738,13 @@ void QCocoaEventDispatcherPrivate::beginModalSession(QWindow *window)
|
||||
updateChildrenWorksWhenModal();
|
||||
currentModalSessionCached = 0;
|
||||
if (currentExecIsNSAppRun) {
|
||||
QEvent *e = new QEvent(QEvent::User);
|
||||
qApp->postEvent(q, e, Qt::HighEventPriority);
|
||||
modalSessionOnNSAppRun = true;
|
||||
q->wakeUp();
|
||||
} else {
|
||||
q->interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
bool QCocoaEventDispatcher::event(QEvent *e)
|
||||
{
|
||||
Q_D(QCocoaEventDispatcher);
|
||||
|
||||
if (e->type() == QEvent::User) {
|
||||
d->q_func()->processEvents(QEventLoop::DialogExec | QEventLoop::EventLoopExec | QEventLoop::WaitForMoreEvents);
|
||||
return true;
|
||||
}
|
||||
|
||||
return QObject::event(e);
|
||||
}
|
||||
|
||||
void QCocoaEventDispatcherPrivate::endModalSession(QWindow *window)
|
||||
{
|
||||
Q_Q(QCocoaEventDispatcher);
|
||||
@ -793,6 +781,7 @@ QCocoaEventDispatcherPrivate::QCocoaEventDispatcherPrivate()
|
||||
runLoopTimerRef(0),
|
||||
blockSendPostedEvents(false),
|
||||
currentExecIsNSAppRun(false),
|
||||
modalSessionOnNSAppRun(false),
|
||||
nsAppRunCalledByQt(false),
|
||||
cleanupModalSessionsNeeded(false),
|
||||
processEventsCalled(0),
|
||||
@ -923,6 +912,14 @@ 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();
|
||||
|
Loading…
Reference in New Issue
Block a user