#endif
#ifndef WX_PRECOMP
- #ifdef __WXMSW__
+ #ifdef __WINDOWS__
#include "wx/msw/wrapwin.h" // includes windows.h for MessageBox()
#endif
#include "wx/list.h"
#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(__WXMSW__) || defined(__WXMICROWIN__)
+#if !defined(__WINDOWS__) || defined(__WXMICROWIN__)
#include <signal.h> // for SIGTRAP used by wxTrap()
#endif //Win/Unix
#if wxDEBUG_LEVEL
#if wxUSE_STACKWALKER
#include "wx/stackwalk.h"
- #ifdef __WXMSW__
+ #ifdef __WINDOWS__
#include "wx/msw/debughlp.h"
#endif
#endif // wxUSE_STACKWALKER
#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
{
#if wxDEBUG_LEVEL
-#if !defined(__WXMSW__)
+#if !defined(__WINDOWS__)
// 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, "Collecting stack trace information, please wait...");
fflush(stderr);
-#endif // !__WXMSW__
+#endif // !__WINDOWS__
wxString stackTrace;
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'));
// break into the debugger
void wxTrap()
{
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
DebugBreak();
#elif defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS
Debugger();
static
bool DoShowAssertDialog(const wxString& msg)
{
- // under MSW we can show the dialog even in the console mode
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+ // under Windows we can show the dialog even in the console mode
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
wxString msgDlg(msg);
// this message is intentionally not translated -- it is for developers
wxT("You can also choose [Cancel] to suppress ")
wxT("further warnings.");
- switch ( ::MessageBox(NULL, msgDlg.wx_str(), wxT("wxWidgets Debug Alert"),
+ switch ( ::MessageBox(NULL, msgDlg.t_str(), wxT("wxWidgets Debug Alert"),
MB_YESNOCANCEL | MB_ICONSTOP ) )
{
case IDYES:
//case IDNO: nothing to do
}
-#else // !__WXMSW__
+#else // !__WINDOWS__
wxUnusedVar(msg);
-#endif // __WXMSW__/!__WXMSW__
+#endif // __WINDOWS__/!__WINDOWS__
// continue with the asserts by default
return false;