-//-----------------------------------------------------------------------------
-// wxYield
-//-----------------------------------------------------------------------------
-
-// not static because used by textctrl.cpp
-//
-// MT-FIXME
-bool wxIsInsideYield = FALSE;
-
-bool wxApp::Yield(bool onlyIfNeeded)
-{
- if ( wxIsInsideYield )
- {
- if ( !onlyIfNeeded )
- {
- wxFAIL_MSG( wxT("wxYield called recursively" ) );
- }
-
- return FALSE;
- }
-
-#if wxUSE_THREADS
- if ( !wxThread::IsMain() )
- {
- // can't call gtk_main_iteration() from other threads like this
- return TRUE;
- }
-#endif // wxUSE_THREADS
-
- wxIsInsideYield = TRUE;
-
- if (!g_isIdle)
- {
- // We need to remove idle callbacks or the loop will
- // never finish.
- wxTheApp->RemoveIdleTag();
- g_isIdle = TRUE;
- }
-
- // disable log flushing from here because a call to wxYield() shouldn't
- // normally result in message boxes popping up &c
- wxLog::Suspend();
-
- while (gtk_events_pending())
- gtk_main_iteration();
-
- // 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). But we
- // call ProcessIdle() only once since this is not meant for longish
- // background jobs (controlled by wxIdleEvent::RequestMore() and the
- // return value of Processidle().
- ProcessIdle();
-
- // let the logs be flashed again
- wxLog::Resume();
-
- wxIsInsideYield = FALSE;
-
- return TRUE;
-}