]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appcmn.cpp
Minor header cleaning.
[wxWidgets.git] / src / common / appcmn.cpp
index 7f31949cb4a0ca0708881a96ae40c7392872448d..44c63efd1a0f9d4cda31b99ac7da23ff6a343592 100644 (file)
 
 #ifndef WX_PRECOMP
     #include "wx/app.h"
+    #include "wx/window.h"
     #include "wx/bitmap.h"
-    #include "wx/intl.h"
-    #include "wx/list.h"
     #include "wx/log.h"
     #include "wx/msgdlg.h"
-    #include "wx/bitmap.h"
     #include "wx/confbase.h"
+    #include "wx/utils.h"
 #endif
 
 #include "wx/apptrait.h"
@@ -40,7 +39,7 @@
 #include "wx/evtloop.h"
 #include "wx/msgout.h"
 #include "wx/thread.h"
-#include "wx/utils.h"
+#include "wx/vidmode.h"
 #include "wx/ptr_scpd.h"
 
 #if defined(__WXMSW__)
@@ -55,6 +54,7 @@
 #include "wx/build.h"
 WX_CHECK_BUILD_OPTIONS("wxCore")
 
+WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete;
 
 // ----------------------------------------------------------------------------
 // wxEventLoopPtr
@@ -63,9 +63,6 @@ WX_CHECK_BUILD_OPTIONS("wxCore")
 // this defines wxEventLoopPtr
 wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop)
 
-// define it here as we don't have common/evtloopcmn.cpp for now
-wxEventLoop *wxEventLoopBase::ms_activeLoop = NULL;
-
 // ============================================================================
 // wxAppBase implementation
 // ============================================================================
@@ -107,7 +104,6 @@ bool wxAppBase::Initialize(int& argcOrig, wxChar **argvOrig)
 #endif
 
     wxInitializeStockLists();
-    wxInitializeStockObjects();
 
     wxBitmap::InitStandardHandlers();
 
@@ -140,7 +136,7 @@ void wxAppBase::CleanUp()
     // undo everything we did in Initialize() above
     wxBitmap::CleanUpHandlers();
 
-    wxDeleteStockObjects();
+    wxStockGDI::DeleteAll();
 
     wxDeleteStockLists();
 
@@ -161,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
 
 // ----------------------------------------------------------------------------
@@ -370,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();