X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/05b4b8ee882d86d1095efe72e5c866d80bb4cc95..c8f04120ce8c8df04f85f12d7283fa13c369e859:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index c24475e00e..ccac439ee7 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -50,6 +50,7 @@ #include "wx/dynlib.h" #include "wx/evtloop.h" #include "wx/thread.h" +#include "wx/scopeguard.h" #include "wx/msw/private.h" #include "wx/msw/dc.h" @@ -340,7 +341,7 @@ public: { if ( m_ok == -1 ) { - wxConsoleStderr * const self = wx_const_cast(wxConsoleStderr *, this); + wxConsoleStderr * const self = const_cast(this); self->m_ok = self->DoInit(); // no need to call IsHistoryUnchanged() as we just initialized @@ -1067,12 +1068,6 @@ bool wxApp::Yield(bool onlyIfNeeded) // MT-FIXME static bool s_inYield = false; -#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 - if ( s_inYield ) { if ( !onlyIfNeeded ) @@ -1083,7 +1078,20 @@ bool wxApp::Yield(bool onlyIfNeeded) return false; } + // set the flag and don't forget to reset it before returning s_inYield = true; + wxON_BLOCK_EXIT_SET(s_inYield, false); + + +#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(); + + // ensure the logs will be flashed again when we exit + wxON_BLOCK_EXIT0(wxLog::Resume); +#endif // wxUSE_LOG + // we don't want to process WM_QUIT from here - it should be processed in // the main event loop in order to stop it @@ -1103,13 +1111,6 @@ bool wxApp::Yield(bool onlyIfNeeded) // if there are pending events, we must process them. ProcessPendingEvents(); -#if wxUSE_LOG - // let the logs be flashed again - wxLog::Resume(); -#endif // wxUSE_LOG - - s_inYield = false; - return true; }