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:
@@ -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):
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user