#ifndef WX_PRECOMP
#include "wx/app.h"
+ #include "wx/log.h"
#endif // WX_PRECOMP
#include "wx/osx/private.h"
wxMacWakeUp();
}
+CFRunLoopRef wxGUIEventLoop::CFGetCurrentRunLoop() const
+{
+ return CFRunLoopGetCurrent();
+}
+
void wxGUIEventLoop::DispatchAndReleaseEvent(EventRef theEvent)
{
if ( wxTheApp )
switch (status)
{
case eventLoopTimedOutErr :
+ // process pending wx events before sending idle events
+ wxTheApp->ProcessPendingEvents();
if ( wxTheApp->ProcessIdle() )
m_sleepTime = kEventDurationNoWait ;
else
}
}
+bool wxGUIEventLoop::YieldFor(long eventsToProcess)
+{
+#if wxUSE_THREADS
+ // Yielding from a non-gui thread needs to bail out, otherwise we end up
+ // possibly sending events in the thread too.
+ if ( !wxThread::IsMain() )
+ {
+ return true;
+ }
+#endif // wxUSE_THREADS
+
+ m_isInsideYield = true;
+ m_eventsToProcessInsideYield = eventsToProcess;
+
+#if wxUSE_LOG
+ // disable log flushing from here because a call to wxYield() shouldn't
+ // normally result in message boxes popping up &c
+ wxLog::Suspend();
+#endif // wxUSE_LOG
+
+ // process all pending events:
+ while ( Pending() )
+ Dispatch();
+
+ // it's necessary to call ProcessIdle() to update the frames sizes which
+ // might have been changed (it also will update other things set from
+ // 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
+ m_isInsideYield = false;
+
+ return true;
+}