X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5276b0a53cef4815230e39b54d2ecda14f72cbd1..cb41a69b152026d6c586d21148e34913291cd733:/src/common/init.cpp?ds=sidebyside diff --git a/src/common/init.cpp b/src/common/init.cpp index 561b726ccd..e00daeb701 100644 --- a/src/common/init.cpp +++ b/src/common/init.cpp @@ -4,7 +4,6 @@ // Author: Vadim Zeitlin // Modified by: // Created: 04.10.99 -// RCS-ID: $Id$ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -37,7 +36,7 @@ #include "wx/scopedptr.h" #include "wx/except.h" -#if defined(__WXMSW__) +#if defined(__WINDOWS__) #include "wx/msw/private.h" #include "wx/msw/msvcrt.h" @@ -53,7 +52,11 @@ } } gs_enableLeakChecks; #endif // wxCrtSetDbgFlag -#endif // __WXMSW__ +#endif // __WINDOWS__ + +#if wxUSE_UNICODE && defined(__WXOSX__) + #include +#endif // ---------------------------------------------------------------------------- // private classes @@ -218,6 +221,18 @@ static void FreeConvertedArgs() // initialization which is always done (not customizable) before wxApp creation static bool DoCommonPreInit() { +#if wxUSE_UNICODE && defined(__WXOSX__) + // In OS X and iOS, wchar_t CRT functions convert to char* and fail under + // some locales. The safest fix is to set LC_CTYPE to UTF-8 to ensure that + // they can handle any input. + // + // Note that this must be done for any app, Cocoa or console, whether or + // not it uses wxLocale. + // + // See http://stackoverflow.com/questions/11713745/why-does-the-printf-family-of-functions-care-about-locale + setlocale(LC_CTYPE, "UTF-8"); +#endif // wxUSE_UNICODE && defined(__WXOSX__) + #if wxUSE_LOG // Reset logging in case we were cleaned up and are being reinitialized. wxLog::DoCreateOnDemand(); @@ -238,7 +253,7 @@ static bool DoCommonPreInit() wxLog::GetActiveTarget(); #endif // wxUSE_LOG -#ifdef __WXMSW__ +#ifdef __WINDOWS__ // GUI applications obtain HINSTANCE in their WinMain() but we also need to // initialize the global wxhInstance variable for the console programs as // they may need it too, so set it here if it wasn't done yet @@ -246,7 +261,7 @@ static bool DoCommonPreInit() { wxSetInstance(::GetModuleHandle(NULL)); } -#endif // __WXMSW__ +#endif // __WINDOWS__ return true; } @@ -394,6 +409,11 @@ static void DoCommonPostCleanup() delete wxMessageOutput::Set(NULL); #if wxUSE_LOG + // call this first as it has a side effect: in addition to flushing all + // logs for this thread, it also flushes everything logged from other + // threads + wxLog::FlushActive(); + // and now delete the last logger as well // // we still don't disable log target auto-vivification even if any log @@ -432,9 +452,9 @@ void wxEntryCleanup() // ---------------------------------------------------------------------------- // for MSW the real wxEntry is defined in msw/main.cpp -#ifndef __WXMSW__ +#ifndef __WINDOWS__ #define wxEntryReal wxEntry -#endif // !__WXMSW__ +#endif // !__WINDOWS__ int wxEntryReal(int& argc, wxChar **argv) { @@ -452,6 +472,9 @@ int wxEntryReal(int& argc, wxChar **argv) wxTRY { +#if 0 // defined(__WXOSX__) && wxOSX_USE_COCOA_OR_IPHONE + // everything done in OnRun using native callbacks +#else // app initialization if ( !wxTheApp->CallOnInit() ) { @@ -467,7 +490,7 @@ int wxEntryReal(int& argc, wxChar **argv) } callOnExit; WX_SUPPRESS_UNUSED_WARN(callOnExit); - +#endif // app execution return wxTheApp->OnRun(); }