X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a608c09d8533b09af952026203fb609703047843..57d0f66a02c560a1d7c772c1272aedd03eb709ea:/wxPython/src/helpers.cpp diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index 0ef3c13249..eee5e107f6 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -276,7 +276,7 @@ void wxPyApp::OnAssertFailure(const wxChar *file, // do the normal wx assert dialog? if (m_assertMode & wxPYAPP_ASSERT_DIALOG) - wxApp::OnAssert(file, line, cond, msg); + wxApp::OnAssertFailure(file, line, func, cond, msg); } } #endif @@ -323,11 +323,7 @@ void wxPyApp::MacReopenApp() /*static*/ bool wxPyApp::GetMacSupportPCMenuShortcuts() { -#ifdef __WXMAC__ - return s_macSupportPCMenuShortcuts; -#else return 0; -#endif } /*static*/ @@ -367,10 +363,7 @@ wxString wxPyApp::GetMacHelpMenuTitleName() { } /*static*/ -void wxPyApp::SetMacSupportPCMenuShortcuts(bool val) { -#ifdef __WXMAC__ - s_macSupportPCMenuShortcuts = val; -#endif +void wxPyApp::SetMacSupportPCMenuShortcuts(bool) { } /*static*/ @@ -495,6 +488,8 @@ void wxPyApp::_BootstrapApp() Py_DECREF(argTuple); Py_DECREF(method); if (retval == NULL) + // Don't PyErr_Print here, let the exception in this case go back + // up to the wx.PyApp.__init__ scope. goto error; pyint = PyNumber_Int(retval); @@ -713,7 +708,19 @@ PyObject* __wxPySetDictionary(PyObject* /* self */, PyObject* args) _AddInfoString("wx-assertions-off"); #endif _AddInfoString(wxPy_SWIG_VERSION); - +#ifdef __WXMAC__ + #if wxMAC_USE_CORE_GRAPHICS + _AddInfoString("mac-cg"); + #else + _AddInfoString("mac-qd"); + #endif + #if wxMAC_USE_NATIVE_TOOLBAR + _AddInfoString("mac-native-tb"); + #else + _AddInfoString("mac-no-native-tb"); + #endif +#endif + #undef _AddInfoString PyObject* PlatInfoTuple = PyList_AsTuple(PlatInfo); @@ -2510,7 +2517,7 @@ bool wxColour_helper(PyObject* source, wxColour** obj) { return true; } } - // last chance: 3-tuple of integers is expected + // last chance: 3-tuple or 4-tuple of integers is expected else if (PySequence_Check(source) && PyObject_Length(source) == 3) { PyObject* o1 = PySequence_GetItem(source, 0); PyObject* o2 = PySequence_GetItem(source, 1); @@ -2527,10 +2534,29 @@ bool wxColour_helper(PyObject* source, wxColour** obj) { Py_DECREF(o3); return true; } + else if (PySequence_Check(source) && PyObject_Length(source) == 4) { + PyObject* o1 = PySequence_GetItem(source, 0); + PyObject* o2 = PySequence_GetItem(source, 1); + PyObject* o3 = PySequence_GetItem(source, 2); + PyObject* o4 = PySequence_GetItem(source, 3); + if (!PyNumber_Check(o1) || !PyNumber_Check(o2) || !PyNumber_Check(o3) || !PyNumber_Check(o4)) { + Py_DECREF(o1); + Py_DECREF(o2); + Py_DECREF(o3); + Py_DECREF(o4); + goto error; + } + **obj = wxColour(PyInt_AsLong(o1), PyInt_AsLong(o2), PyInt_AsLong(o3), PyInt_AsLong(o4)); + Py_DECREF(o1); + Py_DECREF(o2); + Py_DECREF(o3); + Py_DECREF(o4); + return true; + } error: PyErr_SetString(PyExc_TypeError, - "Expected a wxColour object or a string containing a colour name or '#RRGGBB'."); + "Expected a wxColour object, a string containing a colour name or '#RRGGBB', or a 3- or 4-tuple of integers."); return false; } @@ -2753,6 +2779,62 @@ int wxPyImageHandler::GetImageCount( wxInputStream& stream ) { } +//---------------------------------------------------------------------- +// Function to test if the Display (or whatever is the platform equivallent) +// can be connected to. This is accessable from wxPython as a staticmethod of +// wx.App called DisplayAvailable(). + + +bool wxPyTestDisplayAvailable() +{ +#ifdef __WXGTK__ + Display* display; + display = XOpenDisplay(NULL); + if (display == NULL) + return false; + XCloseDisplay(display); + return true; +#endif + +#ifdef __WXMAC__ + // This is adapted from Python's Mac/Modules/MacOS.c in the + // MacOS_WMAvailable function. + bool rv; + ProcessSerialNumber psn; + + /* + ** This is a fairly innocuous call to make if we don't have a window + ** manager, or if we have no permission to talk to it. It will print + ** a message on stderr, but at least it won't abort the process. + ** It appears the function caches the result itself, and it's cheap, so + ** no need for us to cache. + */ +#ifdef kCGNullDirectDisplay + /* On 10.1 CGMainDisplayID() isn't available, and + ** kCGNullDirectDisplay isn't defined. + */ + if (CGMainDisplayID() == 0) { + rv = false; + } else +#endif + { + // Also foreground the application on the first call as a side-effect. + if (GetCurrentProcess(&psn) < 0 || SetFrontProcess(&psn) < 0) { + rv = false; + } else { + rv = true; + } + } + return rv; +#endif + +#ifdef __WXMSW__ + // TODO... + return true; +#endif +} + + //---------------------------------------------------------------------- //----------------------------------------------------------------------