]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appcmn.cpp
fixed incorrectly inversed test for parent [not] being deleted (patch 1624472)
[wxWidgets.git] / src / common / appcmn.cpp
index fb02e6b93dd076cc69d0597fb572fbfd02b1c7f0..e6a72a3d2751fb4c5793faa901f03f4f11db2106 100644 (file)
 #include "wx/vidmode.h"
 #include "wx/ptr_scpd.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
@@ -74,7 +80,10 @@ wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop)
 wxAppBase::wxAppBase()
 {
     m_topWindow = (wxWindow *)NULL;
+    
     m_useBestVisual = false;
+    m_forceTrueColour = false;
+    
     m_isActive = true;
 
     m_mainLoop = NULL;
@@ -157,6 +166,8 @@ void wxAppBase::CleanUp()
 #endif // wxUSE_THREADS
 }
 
+// ----------------------------------------------------------------------------
+// various accessors
 // ----------------------------------------------------------------------------
 
 wxWindow* wxAppBase::GetTopWindow() const
@@ -172,6 +183,24 @@ 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
 
 // ----------------------------------------------------------------------------
@@ -542,15 +571,27 @@ wxRendererNative *wxGUIAppTraitsBase::CreateRenderer()
 
 bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg)
 {
+#if defined(__WXMSW__) || !wxUSE_MSGDLG
     // under MSW we prefer to use the base class version using ::MessageBox()
     // even if wxMessageBox() is available because it has less chances to
     // double fault our app than our wxMessageBox()
-#if defined(__WXMSW__) || !wxUSE_MSGDLG
     return wxAppTraitsBase::ShowAssertDialog(msg);
 #else // wxUSE_MSGDLG
+    wxString msgDlg = msg;
+
+#if wxUSE_STACKWALKER
+    // on Unix stack frame generation may take some time, depending on the
+    // size of the executable mainly... warn the user that we are working
+    wxFprintf(stderr, wxT("[Debug] Generating a stack trace... please wait"));
+    fflush(stderr);
+
+    const wxString stackTrace = GetAssertStackTrace();
+    if ( !stackTrace.empty() )
+        msgDlg << _T("\n\nCall stack:\n") << stackTrace;
+#endif // wxUSE_STACKWALKER
+
     // this message is intentionally not translated -- it is for
     // developpers only
-    wxString msgDlg(msg);
     msgDlg += wxT("\nDo you want to stop the program?\n")
               wxT("You can also choose [Cancel] to suppress ")
               wxT("further warnings.");