adding ProcessPendingEvents as ProcessIdle doesn't call it anymore, closes #11132
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62159 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -89,6 +89,8 @@ bool wxGUIEventLoop::Dispatch()
|
|||||||
switch (status)
|
switch (status)
|
||||||
{
|
{
|
||||||
case eventLoopTimedOutErr :
|
case eventLoopTimedOutErr :
|
||||||
|
// process pending wx events before sending idle events
|
||||||
|
wxTheApp->ProcessPendingEvents();
|
||||||
if ( wxTheApp->ProcessIdle() )
|
if ( wxTheApp->ProcessIdle() )
|
||||||
m_sleepTime = kEventDurationNoWait ;
|
m_sleepTime = kEventDurationNoWait ;
|
||||||
else
|
else
|
||||||
@@ -167,6 +169,10 @@ bool wxGUIEventLoop::YieldFor(long eventsToProcess)
|
|||||||
// OnUpdateUI() which is a nice (and desired) side effect)
|
// OnUpdateUI() which is a nice (and desired) side effect)
|
||||||
while ( ProcessIdle() ) {}
|
while ( ProcessIdle() ) {}
|
||||||
|
|
||||||
|
// if there are pending events, we must process them.
|
||||||
|
if (wxTheApp)
|
||||||
|
wxTheApp->ProcessPendingEvents();
|
||||||
|
|
||||||
#if wxUSE_LOG
|
#if wxUSE_LOG
|
||||||
wxLog::Resume();
|
wxLog::Resume();
|
||||||
#endif // wxUSE_LOG
|
#endif // wxUSE_LOG
|
||||||
|
@@ -28,6 +28,19 @@ void wxDialog::DoShowModal()
|
|||||||
{
|
{
|
||||||
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
|
wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
|
||||||
|
|
||||||
|
// If the app hasn't started, flush the event queue
|
||||||
|
// If we don't do this, the Dock doesn't get the message that
|
||||||
|
// the app has started so will refuse to activate it.
|
||||||
|
NSApplication *theNSApp = [NSApplication sharedApplication];
|
||||||
|
if (![theNSApp isRunning])
|
||||||
|
{
|
||||||
|
wxMacAutoreleasePool pool;
|
||||||
|
while(NSEvent *event = [theNSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES])
|
||||||
|
{
|
||||||
|
[theNSApp sendEvent:event];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wxModalDialogs.Append(this);
|
wxModalDialogs.Append(this);
|
||||||
|
|
||||||
SetFocus() ;
|
SetFocus() ;
|
||||||
@@ -55,9 +68,23 @@ void wxDialog::DoShowModal()
|
|||||||
// unsafe
|
// unsafe
|
||||||
[NSApp runModalSession:session];
|
[NSApp runModalSession:session];
|
||||||
|
|
||||||
|
// break if ended, perform no further idle processing
|
||||||
|
if (!IsModal())
|
||||||
|
break;
|
||||||
|
|
||||||
// do some idle processing
|
// do some idle processing
|
||||||
|
bool needMore = false;
|
||||||
if (wxTheApp)
|
if (wxTheApp)
|
||||||
wxTheApp->ProcessIdle();
|
{
|
||||||
|
wxTheApp->ProcessPendingEvents();
|
||||||
|
needMore = wxTheApp->ProcessIdle();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!needMore)
|
||||||
|
{
|
||||||
|
// no more idle processing wanted - block until the next event
|
||||||
|
[theNSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:NO];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
[NSApp endModalSession:session];
|
[NSApp endModalSession:session];
|
||||||
|
|
||||||
|
@@ -116,6 +116,9 @@ bool wxGUIEventLoop::Dispatch()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (wxTheApp)
|
||||||
|
wxTheApp->ProcessPendingEvents();
|
||||||
|
|
||||||
if ( wxTheApp->ProcessIdle() )
|
if ( wxTheApp->ProcessIdle() )
|
||||||
m_sleepTime = 0.0 ;
|
m_sleepTime = 0.0 ;
|
||||||
else
|
else
|
||||||
@@ -161,6 +164,10 @@ bool wxGUIEventLoop::YieldFor(long eventsToProcess)
|
|||||||
// OnUpdateUI() which is a nice (and desired) side effect)
|
// OnUpdateUI() which is a nice (and desired) side effect)
|
||||||
while ( ProcessIdle() ) {}
|
while ( ProcessIdle() ) {}
|
||||||
|
|
||||||
|
// if there are pending events, we must process them.
|
||||||
|
if (wxTheApp)
|
||||||
|
wxTheApp->ProcessPendingEvents();
|
||||||
|
|
||||||
#if wxUSE_LOG
|
#if wxUSE_LOG
|
||||||
wxLog::Resume();
|
wxLog::Resume();
|
||||||
#endif // wxUSE_LOG
|
#endif // wxUSE_LOG
|
||||||
|
Reference in New Issue
Block a user