// Author: Vadim Zeitlin
// Modified by:
// Created: 04.10.99
-// RCS-ID: $Id$
// Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/scopedptr.h"
#include "wx/except.h"
-#if defined(__WXMSW__)
+#if defined(__WINDOWS__)
+ #include "wx/msw/private.h"
#include "wx/msw/msvcrt.h"
#ifdef wxCrtSetDbgFlag
}
} gs_enableLeakChecks;
#endif // wxCrtSetDbgFlag
-#endif // __WXMSW__
+#endif // __WINDOWS__
+
+#if wxUSE_UNICODE && defined(__WXOSX__)
+ #include <locale.h>
+#endif
// ----------------------------------------------------------------------------
// private classes
free(gs_initData.argv[i]);
}
- delete [] gs_initData.argv;
- gs_initData.argv = NULL;
+ wxDELETEA(gs_initData.argv);
gs_initData.argc = 0;
}
}
// 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();
wxLog::GetActiveTarget();
#endif // wxUSE_LOG
+#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
+ if ( !wxGetInstance() )
+ {
+ wxSetInstance(::GetModuleHandle(NULL));
+ }
+#endif // __WINDOWS__
+
return true;
}
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
// ----------------------------------------------------------------------------
// 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)
{
wxTRY
{
+#if 0 // defined(__WXOSX__) && wxOSX_USE_COCOA_OR_IPHONE
+ // everything done in OnRun using native callbacks
+#else
// app initialization
if ( !wxTheApp->CallOnInit() )
{
} callOnExit;
WX_SUPPRESS_UNUSED_WARN(callOnExit);
-
+#endif
// app execution
return wxTheApp->OnRun();
}