X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/84dc0006665882aabc5a1ba9ef4de75dbefe3a92..bcedac446992587c7805623eac66b36de05686bb:/src/msw/utils.cpp diff --git a/src/msw/utils.cpp b/src/msw/utils.cpp index 7409cd6c8f..6eff2fe253 100644 --- a/src/msw/utils.cpp +++ b/src/msw/utils.cpp @@ -25,6 +25,7 @@ #endif #ifndef WX_PRECOMP + #include "wx/msw/missing.h" // CHARSET_HANGUL #include "wx/utils.h" #include "wx/app.h" #include "wx/intl.h" @@ -41,7 +42,6 @@ #include "wx/confbase.h" // for wxExpandEnvVars() #include "wx/msw/private.h" // includes -#include "wx/msw/missing.h" // CHARSET_HANGUL #if defined(__CYGWIN__) //CYGWIN gives annoying warning about runtime stuff if we don't do this @@ -951,7 +951,7 @@ bool wxShutdown(wxShutdownFlags WXUNUSED_IN_WINCE(wFlags)) #elif defined(__WIN32__) bool bOK = true; - if ( wxGetOsVersion(NULL, NULL) == wxWINDOWS_NT ) // if is NT or 2K + if ( wxGetOsVersion(NULL, NULL) == wxOS_WINDOWS_NT ) // if is NT or 2K { // Get a token for this process. HANDLE hToken; @@ -1162,61 +1162,57 @@ wxString wxGetOsDescription() return str; } -wxToolkitInfo& wxAppTraits::GetToolkitInfo() +bool wxIsPlatform64Bit() { - // cache the version info, it's not going to change - // - // NB: this is MT-safe, we may use these static vars from different threads - // but as they always have the same value it doesn't matter - static int s_ver = -1, - s_major = -1, - s_minor = -1; - - if ( s_ver == -1 ) +#if defined(_WIN64) + return true; // 64-bit programs run only on Win64 +#else // Win32 + // 32-bit programs run on both 32-bit and 64-bit Windows so check + typedef BOOL (WINAPI *IsWow64Process_t)(HANDLE, BOOL *); + + wxDynamicLibrary dllKernel32(_T("kernel32.dll")); + IsWow64Process_t pfnIsWow64Process = + (IsWow64Process_t)dllKernel32.RawGetSymbol(_T("IsWow64Process")); + + BOOL wow64 = FALSE; + if ( pfnIsWow64Process ) { - OSVERSIONINFO info; - wxZeroMemory(info); + pfnIsWow64Process(::GetCurrentProcess(), &wow64); + } + //else: running under a system without Win64 support - s_ver = wxWINDOWS; - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if ( ::GetVersionEx(&info) ) - { - s_major = info.dwMajorVersion; - s_minor = info.dwMinorVersion; + return wow64 != FALSE; +#endif // Win64/Win32 +} -#ifdef __SMARTPHONE__ - s_ver = wxWINDOWS_SMARTPHONE; -#elif defined(__POCKETPC__) - s_ver = wxWINDOWS_POCKETPC; -#else - switch ( info.dwPlatformId ) - { - case VER_PLATFORM_WIN32s: - s_ver = wxWIN32S; - break; +wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin) +{ + OSVERSIONINFO info; + wxZeroMemory(info); - case VER_PLATFORM_WIN32_WINDOWS: - s_ver = wxWIN95; - break; + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if ( ::GetVersionEx(&info) ) + { + if (verMaj) *verMaj = info.dwMajorVersion; + if (verMin) *verMin = info.dwMinorVersion; + } - case VER_PLATFORM_WIN32_NT: - s_ver = wxWINDOWS_NT; - break; -#ifdef __WXWINCE__ - case VER_PLATFORM_WIN32_CE: - s_ver = wxWINDOWS_CE; -#endif - } -#endif - } +#if defined( __WXWINCE__ ) + return wxOS_WINDOWS_CE; +#elif defined( __WXMICROWIN__ ) + return wxOS_WINDOWS_MICRO; +#else + switch ( info.dwPlatformId ) + { + case VER_PLATFORM_WIN32_NT: + return wxOS_WINDOWS_NT; + + case VER_PLATFORM_WIN32_WINDOWS: + return wxOS_WINDOWS_9X; } - static wxToolkitInfo info; - info.versionMajor = s_major; - info.versionMinor = s_minor; - info.os = s_ver; - info.name = _T("wxBase"); - return info; + return wxOS_UNKNOWN; +#endif } wxWinVersion wxGetWinVersion() @@ -1225,7 +1221,7 @@ wxWinVersion wxGetWinVersion() verMin; switch ( wxGetOsVersion(&verMaj, &verMin) ) { - case wxWIN95: + case wxOS_WINDOWS_9X: if ( verMaj == 4 ) { switch ( verMin ) @@ -1242,7 +1238,7 @@ wxWinVersion wxGetWinVersion() } break; - case wxWINDOWS_NT: + case wxOS_WINDOWS_NT: switch ( verMaj ) { case 3: @@ -1270,6 +1266,9 @@ wxWinVersion wxGetWinVersion() } break; + default: + // Do nothing just to silence GCC warning + break; } return wxWinVersion_Unknown; @@ -1391,10 +1390,10 @@ extern WXDLLIMPEXP_BASE long wxEncodingToCodepage(wxFontEncoding encoding) case wxFONTENCODING_ISO8859_8: ret = 28598; break; case wxFONTENCODING_ISO8859_9: ret = 28599; break; case wxFONTENCODING_ISO8859_10: ret = 28600; break; - case wxFONTENCODING_ISO8859_11: ret = 28601; break; + case wxFONTENCODING_ISO8859_11: ret = 874; break; // case wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it case wxFONTENCODING_ISO8859_13: ret = 28603; break; - case wxFONTENCODING_ISO8859_14: ret = 28604; break; + // case wxFONTENCODING_ISO8859_14: ret = 28604; break; // no correspondence on Windows case wxFONTENCODING_ISO8859_15: ret = 28605; break; case wxFONTENCODING_KOI8: ret = 20866; break; case wxFONTENCODING_KOI8_U: ret = 21866; break;