Reset LC_NUMERIC to "C" for Python < 2.4. This fixes Python's float parser.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30503 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2004-11-12 18:12:49 +00:00
parent 6a91f7142d
commit ab897a69db
2 changed files with 42 additions and 14 deletions

View File

@@ -16,6 +16,7 @@
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
%{ %{
#include <locale.h>
%} %}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -311,24 +312,51 @@ public:
%extend { %extend {
wxLocale(int language = -1, wxLocale(int language = -1,
int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING) { int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING) {
wxLocale* loc;
if (language == -1) if (language == -1)
return new wxLocale(); loc = new wxLocale();
else else
return new wxLocale(language, flags); loc = new wxLocale(language, flags);
// Python before 2.4 needs to have LC_NUMERIC set to "C" in order
// for the floating point conversions and such to work right.
%#if PY_VERSION_HEX < 0x02040000
setlocale(LC_NUMERIC, "C");
%#endif
return loc;
} }
} }
// restores old locale // restores old locale
~wxLocale(); ~wxLocale();
%name(Init1)bool Init(const wxString& szName, %extend {
bool Init1(const wxString& szName,
const wxString& szShort = wxPyEmptyString, const wxString& szShort = wxPyEmptyString,
const wxString& szLocale = wxPyEmptyString, const wxString& szLocale = wxPyEmptyString,
bool bLoadDefault = true, bool bLoadDefault = true,
bool bConvertEncoding = false); bool bConvertEncoding = false) {
bool rc = self->Init(szName, szShort, szLocale, bLoadDefault, bConvertEncoding);
// Python before 2.4 needs to have LC_NUMERIC set to "C" in order
// for the floating point conversions and such to work right.
%#if PY_VERSION_HEX < 0x02040000
setlocale(LC_NUMERIC, "C");
%#endif
return rc;
}
bool Init2(int language = wxLANGUAGE_DEFAULT,
int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING) {
bool rc = self->Init(language, flags);
// Python before 2.4 needs to have LC_NUMERIC set to "C" in order
// for the floating point conversions and such to work right.
%#if PY_VERSION_HEX < 0x02040000
setlocale(LC_NUMERIC, "C");
%#endif
return rc;
}
}
%name(Init2) bool Init(int language = wxLANGUAGE_DEFAULT,
int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING);
%pythoncode { %pythoncode {
def Init(self, *_args, **_kwargs): def Init(self, *_args, **_kwargs):

View File

@@ -49,7 +49,7 @@
//---------------------------------------------------------------------- //----------------------------------------------------------------------
#if PYTHON_API_VERSION <= 1007 && wxUSE_UNICODE #if PYTHON_API_VERSION < 1009 && wxUSE_UNICODE
#error Python must support Unicode to use wxWindows Unicode #error Python must support Unicode to use wxWindows Unicode
#endif #endif
@@ -421,10 +421,10 @@ void wxPyApp::_BootstrapApp()
goto error; goto error;
} }
// On wxGTK the locale will be changed to match the system settings, but // On wxGTK the locale will be changed to match the system settings,
// Python needs to have LC_NUMERIC set to "C" in order for the floating // but Python before 2.4 needs to have LC_NUMERIC set to "C" in order
// point conversions and such to work right. // for the floating point conversions and such to work right.
#if defined(__WXGTK__) && PYTHON_API_VERSION <= 1012 #if defined(__WXGTK__) && PY_VERSION_HEX < 0x02040000
setlocale(LC_NUMERIC, "C"); setlocale(LC_NUMERIC, "C");
#endif #endif