diff --git a/wxPython/docs/CHANGES.txt b/wxPython/docs/CHANGES.txt index 5d82aa0f03..350aa5dbe5 100644 --- a/wxPython/docs/CHANGES.txt +++ b/wxPython/docs/CHANGES.txt @@ -50,9 +50,19 @@ a very small amount of overhead and removes several unneccessary problems. Replaced wx/lib/pubsub.py with a version that uses weak references to -track the subscribers. Thanks go to Oliver Schoenborn and Robb -Shecter. +track the subscribers, plus other fixes/additions. Thanks go to +Oliver Schoenborn and Robb Shecter. +wxGTK now uses gtk_init_check so wxPython can raise an exception if +there is no DISPLAY available or other initializaion problem. + +wx.GetKeyState now has an implementation for wxGTK and is able to +detect the up/down or toggle state of modifier and toggle keys. + +The LC_NUMERIC locale is now reset back to "C" (compatibility) when +running on wxGTK to work around the fact that GTK requires the locale +to be set to the system settings but Python depends on LC_NUMERIC +remaining compatible with "C". diff --git a/wxPython/src/_functions.i b/wxPython/src/_functions.i index aa33a105b9..88a1d05b6b 100644 --- a/wxPython/src/_functions.i +++ b/wxPython/src/_functions.i @@ -209,17 +209,11 @@ wxWindow* wxGetTopLevelParent(wxWindow *win); -#if defined(__WXMSW__) || defined(__WXMAC__) + // Get the state of a key (true if pressed, false if not) // This is generally most useful getting the state of -// Caps Lock, Num Lock and Scroll Lock... +// the modifier or toggle keys. bool wxGetKeyState(wxKeyCode key); -#else -%inline %{ - bool wxGetKeyState(wxKeyCode key) - { wxPyRaiseNotImplemented(); return False; } -%} -#endif //--------------------------------------------------------------------------- diff --git a/wxPython/src/_intl_ex.py b/wxPython/src/_intl_ex.py index bfab10096f..b58b4e936b 100644 --- a/wxPython/src/_intl_ex.py +++ b/wxPython/src/_intl_ex.py @@ -1,14 +1,5 @@ #---------------------------------------------------------------------------- -# wxGTK sets the locale when initialized. Doing this at the Python -# level should set it up to match what GTK is doing at the C level. -if wx.Platform == "__WXGTK__": - try: - import locale - locale.setlocale(locale.LC_ALL, "") - except: - pass - -# On MSW add the directory where the wxWindows catalogs were installed +# On MSW add the directory where the wxWidgets catalogs were installed # to the default catalog path. if wx.Platform == "__WXMSW__": import os diff --git a/wxPython/src/gtk/_gdi.py b/wxPython/src/gtk/_gdi.py index 0a28e7f869..3389d24ae4 100644 --- a/wxPython/src/gtk/_gdi.py +++ b/wxPython/src/gtk/_gdi.py @@ -2306,16 +2306,16 @@ def EncodingConverter_CanConvert(*args, **kwargs): return _gdi_.EncodingConverter_CanConvert(*args, **kwargs) #---------------------------------------------------------------------------- -# wxGTK sets the locale when initialized. Doing this at the Python -# level should set it up to match what GTK is doing at the C level. -if wx.Platform == "__WXGTK__": - try: - import locale - locale.setlocale(locale.LC_ALL, "") - except: - pass +## # wxGTK sets the locale when initialized. Doing this at the Python +## # level should set it up to match what GTK is doing at the C level. +## if wx.Platform == "__WXGTK__": +## try: +## import locale +## locale.setlocale(locale.LC_ALL, "") +## except: +## pass -# On MSW add the directory where the wxWindows catalogs were installed +# On MSW add the directory where the wxWidgets catalogs were installed # to the default catalog path. if wx.Platform == "__WXMSW__": import os diff --git a/wxPython/src/gtk/_misc_wrap.cpp b/wxPython/src/gtk/_misc_wrap.cpp index 29ec1693e5..b855dc5cdf 100644 --- a/wxPython/src/gtk/_misc_wrap.cpp +++ b/wxPython/src/gtk/_misc_wrap.cpp @@ -527,10 +527,6 @@ SWIG_FromUnsignedLong(unsigned long value) } - bool wxGetKeyState(wxKeyCode key) - { wxPyRaiseNotImplemented(); return False; } - - void wxWakeUpMainThread() {} diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index 13f96f4dbd..c08d287265 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -29,6 +29,7 @@ #include #include #define GetXWindow(wxwin) GDK_WINDOW_XWINDOW((wxwin)->m_widget->window) +#include #endif #ifdef __WXX11__ @@ -398,15 +399,28 @@ void wxPyApp::_BootstrapApp() } wxPyEndBlockThreads(blocked); + // Initialize wxWidgets result = wxEntryStart(argc, argv); delete [] argv; blocked = wxPyBeginBlockThreads(); if (! result) { - PyErr_SetString(PyExc_SystemError, "wxEntryStart failed!"); + PyErr_SetString(PyExc_SystemError, + "wxEntryStart failed, unable to initialize wxWidgets!" +#ifdef __WXGTK__ + " (Is DISPLAY set properly?)" +#endif + ); goto error; } + // On wxGTK the locale will be changed to match the system settings, but + // Python needs to have LC_NUMERIC set to "C" in order for the floating + // point conversions and such to work right. +#ifdef __WXGTK__ + setlocale(LC_NUMERIC, "C"); +#endif + // The stock objects were all NULL when they were loaded into // SWIG generated proxies, so re-init those now... wxPy_ReinitStockObjects(3); @@ -437,7 +451,6 @@ void wxPyApp::_BootstrapApp() result = True; } - if (! result) { PyErr_SetString(PyExc_SystemExit, "OnInit returned False, exiting..."); }