]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appbase.cpp
Add missing WXK constants for the control keys
[wxWidgets.git] / src / common / appbase.cpp
index 3671f0ee0e395a53a6b94e9336f75b4c1dec7899..ac7d977062a77942fd5c40b09c87e7783626b500 100644 (file)
 #include "wx/tokenzr.h"
 #include "wx/thread.h"
 
-#if wxUSE_EXCEPTIONS && wxUSE_STL
-    #include <exception>
-    #include <typeinfo>
-#endif
+#if wxUSE_STL
+    #if wxUSE_EXCEPTIONS
+        #include <exception>
+        #include <typeinfo>
+    #endif
+    #if wxUSE_INTL
+        #include <locale>
+    #endif
+#endif // wxUSE_STL
 
 #if !defined(__WINDOWS__) || defined(__WXMICROWIN__)
   #include  <signal.h>      // for SIGTRAP used by wxTrap()
@@ -834,7 +839,19 @@ bool wxConsoleAppTraitsBase::HasStderr()
 #if wxUSE_INTL
 void wxAppTraitsBase::SetLocale()
 {
+    // We want to use the user locale by default in GUI applications in order
+    // to show the numbers, dates &c in the familiar format -- and also accept
+    // this format on input (especially important for decimal comma/dot).
     wxSetlocale(LC_ALL, "");
+
+#if wxUSE_STL
+    // At least in some environments, e.g. MinGW-64, if the global C++ locale
+    // is different from the global C locale, all stream operations temporarily
+    // change the locale resulting in a huge slowdown (3 times slower in some
+    // real-life applications), so change the C++ locale to match.
+    std::locale::global(std::locale(""));
+#endif  //wxUSE_STL
+
     wxUpdateLocaleIsUtf8();
 }
 #endif
@@ -953,7 +970,7 @@ wxString wxAppTraitsBase::GetAssertStackTrace()
     static const int maxLines = 20;
 
     StackDump dump;
-    dump.Walk(2, maxLines); // don't show OnAssert() call itself
+    dump.Walk(8, maxLines); // 8 is chosen to hide all OnAssert() calls
     stackTrace = dump.GetStackTrace();
 
     const int count = stackTrace.Freq(wxT('\n'));