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:
Stefan Csomor
2009-09-26 18:50:33 +00:00
parent 0b2a23c48d
commit b0a9bfc8b8
3 changed files with 41 additions and 1 deletions

View File

@@ -89,6 +89,8 @@ bool wxGUIEventLoop::Dispatch()
switch (status)
{
case eventLoopTimedOutErr :
// process pending wx events before sending idle events
wxTheApp->ProcessPendingEvents();
if ( wxTheApp->ProcessIdle() )
m_sleepTime = kEventDurationNoWait ;
else
@@ -167,6 +169,10 @@ bool wxGUIEventLoop::YieldFor(long eventsToProcess)
// OnUpdateUI() which is a nice (and desired) side effect)
while ( ProcessIdle() ) {}
// if there are pending events, we must process them.
if (wxTheApp)
wxTheApp->ProcessPendingEvents();
#if wxUSE_LOG
wxLog::Resume();
#endif // wxUSE_LOG

View File

@@ -28,6 +28,19 @@ void wxDialog::DoShowModal()
{
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);
SetFocus() ;
@@ -55,9 +68,23 @@ void wxDialog::DoShowModal()
// unsafe
[NSApp runModalSession:session];
// break if ended, perform no further idle processing
if (!IsModal())
break;
// do some idle processing
bool needMore = false;
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];

View File

@@ -116,6 +116,9 @@ bool wxGUIEventLoop::Dispatch()
}
else
{
if (wxTheApp)
wxTheApp->ProcessPendingEvents();
if ( wxTheApp->ProcessIdle() )
m_sleepTime = 0.0 ;
else
@@ -161,6 +164,10 @@ bool wxGUIEventLoop::YieldFor(long eventsToProcess)
// OnUpdateUI() which is a nice (and desired) side effect)
while ( ProcessIdle() ) {}
// if there are pending events, we must process them.
if (wxTheApp)
wxTheApp->ProcessPendingEvents();
#if wxUSE_LOG
wxLog::Resume();
#endif // wxUSE_LOG