Move platform-specific parts of wxLocale::Init() to wxUILocale
This is tidier than using #ifdefs in the same common file and also ensures that initializing wxLocale affects wxUILocale too, which will be important for compatibility when the code elsewhere is modified to use wxUILocale::GetInfo() instead of wxLocale::GetInfo() in the upcoming commits. This commit is best viewed with --color-moved git option.
This commit is contained in:
@@ -22,22 +22,48 @@
|
||||
|
||||
#include "wx/private/uilocale.h"
|
||||
|
||||
#include "wx/msw/private/uilocale.h"
|
||||
|
||||
#include "wx/dynlib.h"
|
||||
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
#ifndef LOCALE_SNAME
|
||||
#define LOCALE_SNAME 0x5c
|
||||
#endif
|
||||
|
||||
// This function is defined in src/common/intl.cpp, just declare it here for
|
||||
// now before refactoring the code.
|
||||
wxString wxGetInfoFromLCID(LCID lcid, wxLocaleInfo index, wxLocaleCategory cat);
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// helper functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
// Trivial wrapper for ::SetThreadUILanguage().
|
||||
//
|
||||
// TODO-XP: Drop this when we don't support XP any longer.
|
||||
static void wxMSWSetThreadUILanguage(LANGID langid)
|
||||
{
|
||||
// SetThreadUILanguage() is available on XP, but with unclear
|
||||
// behavior, so avoid calling it there.
|
||||
if ( wxGetWinVersion() >= wxWinVersion_Vista )
|
||||
{
|
||||
wxLoadedDLL dllKernel32(wxS("kernel32.dll"));
|
||||
typedef LANGID(WINAPI *SetThreadUILanguage_t)(LANGID);
|
||||
SetThreadUILanguage_t pfnSetThreadUILanguage = NULL;
|
||||
wxDL_INIT_FUNC(pfn, SetThreadUILanguage, dllKernel32);
|
||||
if (pfnSetThreadUILanguage)
|
||||
pfnSetThreadUILanguage(langid);
|
||||
}
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void wxUseLCID(LCID lcid)
|
||||
{
|
||||
::SetThreadLocale(lcid);
|
||||
|
||||
wxMSWSetThreadUILanguage(LANGIDFROMLCID(lcid));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxUILocale implementation for MSW
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -50,6 +76,7 @@ public:
|
||||
explicit wxUILocaleImplLCID(LCID lcid)
|
||||
: m_lcid(lcid)
|
||||
{
|
||||
wxUseLCID(lcid);
|
||||
}
|
||||
|
||||
wxString GetName() const wxOVERRIDE
|
||||
@@ -98,4 +125,17 @@ wxUILocaleImpl* wxUILocaleImpl::CreateUserDefault()
|
||||
return new wxUILocaleImplLCID(LOCALE_USER_DEFAULT);
|
||||
}
|
||||
|
||||
/* static */
|
||||
wxUILocaleImpl* wxUILocaleImpl::CreateForLanguage(const wxLanguageInfo& info)
|
||||
{
|
||||
if ( info.WinLang == 0 )
|
||||
{
|
||||
wxLogWarning(wxS("Locale '%s' not supported by OS."), info.Description);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return new wxUILocaleImplLCID(info.GetLCID());
|
||||
}
|
||||
|
||||
#endif // wxUSE_INTL
|
||||
|
Reference in New Issue
Block a user