X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0bca03736369e836cce9297509505c5972e775dd..9fd8f2dd3df305448a0c2d56508c04e26385a76d:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 516a0acf10..44c63efd1a 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -25,10 +25,9 @@ #endif #ifndef WX_PRECOMP - #include "wx/list.h" #include "wx/app.h" + #include "wx/window.h" #include "wx/bitmap.h" - #include "wx/intl.h" #include "wx/log.h" #include "wx/msgdlg.h" #include "wx/confbase.h" @@ -40,6 +39,7 @@ #include "wx/evtloop.h" #include "wx/msgout.h" #include "wx/thread.h" +#include "wx/vidmode.h" #include "wx/ptr_scpd.h" #if defined(__WXMSW__) @@ -157,6 +157,41 @@ void wxAppBase::CleanUp() #endif // wxUSE_THREADS } +// ---------------------------------------------------------------------------- +// various accessors +// ---------------------------------------------------------------------------- + +wxWindow* wxAppBase::GetTopWindow() const +{ + wxWindow* window = m_topWindow; + if (window == NULL && wxTopLevelWindows.GetCount() > 0) + window = wxTopLevelWindows.GetFirst()->GetData(); + return window; +} + +wxVideoMode wxAppBase::GetDisplayMode() const +{ + return wxVideoMode(); +} + +wxLayoutDirection wxAppBase::GetLayoutDirection() const +{ +#if wxUSE_INTL + const wxLocale *const locale = wxGetLocale(); + if ( locale ) + { + const wxLanguageInfo *const + info = wxLocale::GetLanguageInfo(locale->GetLanguage()); + + if ( info ) + return info->LayoutDirection; + } +#endif // wxUSE_INTL + + // we don't know + return wxLayout_Default; +} + #if wxUSE_CMDLINE_PARSER // ---------------------------------------------------------------------------- @@ -366,11 +401,14 @@ void wxAppBase::DeletePendingObjects() { wxObject *obj = node->GetData(); - delete obj; - - if (wxPendingDelete.Member(obj)) + // remove it from the list first so that if we get back here somehow + // during the object deletion (e.g. wxYield called from its dtor) we + // wouldn't try to delete it the second time + if ( wxPendingDelete.Member(obj) ) wxPendingDelete.Erase(node); + delete obj; + // Deleting one object may have deleted other pending // objects, so start from beginning of list again. node = wxPendingDelete.GetFirst();