X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90e15296e9208a869efcc96329597fa3bf263d26..a43a9e5521440dbb28037646ed4a07125c8823a9:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index ef67c91681..d3768ba4a7 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -40,16 +40,7 @@ #include "wx/msgout.h" #include "wx/thread.h" #include "wx/vidmode.h" - -#ifdef __WXDEBUG__ - #if wxUSE_STACKWALKER - #include "wx/stackwalk.h" - #endif // wxUSE_STACKWALKER -#endif // __WXDEBUG__ - -#if defined(__WXMSW__) - #include "wx/msw/private.h" // includes windows.h for LOGFONT -#endif +#include "wx/evtloop.h" #if wxUSE_FONTMAP #include "wx/fontmap.h" @@ -71,7 +62,7 @@ WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete; wxAppBase::wxAppBase() { - m_topWindow = (wxWindow *)NULL; + m_topWindow = NULL; m_useBestVisual = false; m_forceTrueColour = false; @@ -102,6 +93,10 @@ bool wxAppBase::Initialize(int& argcOrig, wxChar **argvOrig) wxBitmap::InitStandardHandlers(); + // for compatibility call the old initialization function too + if ( !OnInitGui() ) + return false; + return true; } @@ -323,6 +318,25 @@ void wxAppBase::SetActive(bool active, wxWindow * WXUNUSED(lastFocus)) (void)ProcessEvent(event); } +bool wxAppBase::SafeYield(wxWindow *win, bool onlyIfNeeded) +{ + wxWindowDisabler wd(win); + + wxEventLoopBase * const loop = wxEventLoopBase::GetActive(); + + return loop && loop->Yield(onlyIfNeeded); +} + +bool wxAppBase::SafeYieldFor(wxWindow *win, long eventsToProcess) +{ + wxWindowDisabler wd(win); + + wxEventLoopBase * const loop = wxEventLoopBase::GetActive(); + + return loop && loop->YieldFor(eventsToProcess); +} + + // ---------------------------------------------------------------------------- // idle handling // ---------------------------------------------------------------------------- @@ -351,11 +365,11 @@ void wxAppBase::DeletePendingObjects() // Returns true if more time is needed. bool wxAppBase::ProcessIdle() { - // process pending wx events before sending idle events - ProcessPendingEvents(); - + // call the base class version first, it will process the pending events + // (which should be done before the idle events generation) and send the + // idle event to wxTheApp itself + bool needMore = wxAppConsoleBase::ProcessIdle(); wxIdleEvent event; - bool needMore = false; wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); while (node) { @@ -365,9 +379,6 @@ bool wxAppBase::ProcessIdle() node = node->GetNext(); } - if (wxAppConsole::ProcessIdle()) - needMore = true; - // 'Garbage' collection of windows deleted with Close(). DeletePendingObjects(); @@ -466,8 +477,6 @@ wxRendererNative *wxGUIAppTraitsBase::CreateRenderer() return NULL; } -#ifdef __WXDEBUG__ - bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) { // under MSW we prefer to use the base class version using ::MessageBox() @@ -481,6 +490,7 @@ bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) #if defined(__WXMSW__) || defined(__WXDFB__) || !wxUSE_MSGDLG return wxAppTraitsBase::ShowAssertDialog(msg); #else // wxUSE_MSGDLG +#if wxDEBUG_LEVEL wxString msgDlg = msg; #if wxUSE_STACKWALKER @@ -513,13 +523,16 @@ bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) //case wxNO: nothing to do } +#else // !wxDEBUG_LEVEL + // this function always exists (for ABI compatibility) but is never called + // if debug level is 0 and so can simply do nothing then + wxUnusedVar(msg); +#endif // wxDEBUG_LEVEL/!wxDEBUG_LEVEL return false; #endif // !wxUSE_MSGDLG/wxUSE_MSGDLG } -#endif // __WXDEBUG__ - bool wxGUIAppTraitsBase::HasStderr() { // we consider that under Unix stderr always goes somewhere, even if the