Caching the decimal and thousands separators in wxNumberFormatter is a useful
performance optimization, however it can give wrong results if the locale
changed since the cached values were initialized. So remember the locale used
for the initialization and redo it if it changed. This should still be almost
as fast as the previous version but now also correct (still not MT-safe
though).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66713
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// concurrently from more than one thread so it's not a real problem.
static wxChar s_decimalSeparator = 0;
// concurrently from more than one thread so it's not a real problem.
static wxChar s_decimalSeparator = 0;
- if ( !s_decimalSeparator )
+ // Remember the locale which was current when we initialized, we must redo
+ // the initialization if the locale changed.
+ static wxLocale *s_localeUsedForInit = NULL;
+
+ if ( !s_decimalSeparator || (s_localeUsedForInit != wxGetLocale()) )
{
const wxString
s = wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER);
{
const wxString
s = wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER);
s_decimalSeparator = s[0];
}
s_decimalSeparator = s[0];
}
+
+ s_localeUsedForInit = wxGetLocale();
}
return s_decimalSeparator;
}
return s_decimalSeparator;
{
static wxChar s_thousandsSeparator = 0;
static bool s_initialized = false;
{
static wxChar s_thousandsSeparator = 0;
static bool s_initialized = false;
+ static wxLocale *s_localeUsedForInit = NULL;
+ if ( !s_initialized || (s_localeUsedForInit != wxGetLocale()) )
{
const wxString
s = wxLocale::GetInfo(wxLOCALE_THOUSANDS_SEP, wxLOCALE_CAT_NUMBER);
{
const wxString
s = wxLocale::GetInfo(wxLOCALE_THOUSANDS_SEP, wxLOCALE_CAT_NUMBER);
// be empty if grouping is not used, so just leave it as 0.
s_initialized = true;
// be empty if grouping is not used, so just leave it as 0.
s_initialized = true;
+ s_localeUsedForInit = wxGetLocale();
}
if ( !s_thousandsSeparator )
}
if ( !s_thousandsSeparator )