X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f9862abdc98245a4eb6cbab3cbbd825f62cb09e9..a92d972108f87b7ce33a9e2353c32a7a649097eb:/src/gtk1/app.cpp diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index e7345fe6a9..14935b2780 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -80,16 +80,24 @@ void wxExit() // wxYield //----------------------------------------------------------------------------- +static bool gs_inYield = FALSE; + bool wxYield() { -#ifdef __WXDEBUG__ - static bool s_inYield = FALSE; - - if (s_inYield) +#if wxUSE_THREADS + if ( !wxThread::IsMain() ) + { + // can't call gtk_main_iteration() from other threads like this + return TRUE; + } +#endif // wxUSE_THREADS + +#ifdef __WXDEBUG__ + if (gs_inYield) wxFAIL_MSG( wxT("wxYield called recursively" ) ); - - s_inYield = TRUE; #endif + + gs_inYield = TRUE; if (!g_isIdle) { @@ -115,13 +123,24 @@ bool wxYield() // let the logs be flashed again wxLog::Resume(); -#ifdef __WXDEBUG__ - s_inYield = FALSE; -#endif + gs_inYield = FALSE; return TRUE; } +//----------------------------------------------------------------------------- +// wxYieldIfNeeded +// Like wxYield, but fails silently if the yield is recursive. +//----------------------------------------------------------------------------- + +bool wxYieldIfNeeded() +{ + if (gs_inYield) + return FALSE; + + return wxYield(); +} + //----------------------------------------------------------------------------- // wxWakeUpIdle //-----------------------------------------------------------------------------