X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1dc7b4c5d3dafc73f09a3eb77f554d6a49419fb..9fcdfe053aed83e5f2724dd2bc1183900447f94c:/wxPython/src/helpers.cpp diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index d4c30cce5f..9c983e008b 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -2510,7 +2510,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 +2527,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 +2772,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 +} + + //---------------------------------------------------------------------- //----------------------------------------------------------------------