wxPyEndBlockThreads(blocked);
}
+void wxPyApp::MacOpenURL(const wxString &url)
+{
+ wxPyBlock_t blocked = wxPyBeginBlockThreads();
+ if (wxPyCBH_findCallback(m_myInst, "MacOpenURL")) {
+ PyObject* s = wx2PyString(url);
+ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s));
+ Py_DECREF(s);
+ }
+ wxPyEndBlockThreads(blocked);
+}
+
void wxPyApp::MacPrintFile(const wxString &fileName)
{
wxPyBlock_t blocked = wxPyBeginBlockThreads();
wxPyCBInputStream::~wxPyCBInputStream() {
- wxPyBlock_t blocked;
+ wxPyBlock_t blocked = wxPyBlock_t_default;
if (m_block) blocked = wxPyBeginBlockThreads();
Py_XDECREF(m_read);
Py_XDECREF(m_seek);
wxPyCBInputStream* wxPyCBInputStream::create(PyObject *py, bool block) {
- wxPyBlock_t blocked;
+ wxPyBlock_t blocked = wxPyBlock_t_default;
if (block) blocked = wxPyBeginBlockThreads();
PyObject* read = getMethod(py, "read");
void wxPyCBH_delete(wxPyCallbackHelper* cbh) {
- if (cbh->m_incRef) {
+ if (cbh->m_incRef && Py_IsInitialized()) {
wxPyBlock_t blocked = wxPyBeginBlockThreads();
Py_XDECREF(cbh->m_self);
Py_XDECREF(cbh->m_class);
target = new wxString();
size_t len = PyUnicode_GET_SIZE(uni);
if (len) {
- PyUnicode_AsWideChar((PyUnicodeObject*)uni, target->GetWriteBuf(len), len);
- target->UngetWriteBuf(len);
+ PyUnicode_AsWideChar((PyUnicodeObject*)uni, wxStringBuffer(*target, len), len);
}
if (PyString_Check(source))
}
size_t len = PyUnicode_GET_SIZE(uni);
if (len) {
- PyUnicode_AsWideChar((PyUnicodeObject*)uni, target.GetWriteBuf(len), len);
- target.UngetWriteBuf();
+ PyUnicode_AsWideChar((PyUnicodeObject*)uni, wxStringBuffer(target, len), len);
}
if (!PyUnicode_Check(source))
+bool wxPosition_helper(PyObject* source, wxPosition** obj)
+{
+ if (source == Py_None) {
+ **obj = wxPosition(-1,-1);
+ return true;
+ }
+ return wxPyTwoIntItem_helper(source, obj, wxT("wxPosition"));
+}
+
+
+
bool wxRealPoint_helper(PyObject* source, wxRealPoint** obj) {
if (source == Py_None) {
return true;
}
error:
- PyErr_SetString(PyExc_TypeError, "Expected a 2-tuple of floats or a wxPoint2D object.");
+ PyErr_SetString(PyExc_TypeError, "Expected a 2-tuple of floats or a wx.Point2D object.");
+ return false;
+}
+
+
+
+bool wxRect2D_helper(PyObject* source, wxRect2D** obj) {
+
+ if (source == Py_None) {
+ **obj = wxRect2D(-1,-1,-1,-1);
+ return true;
+ }
+
+ // If source is an object instance then it may already be the right type
+ if (wxPySwigInstance_Check(source)) {
+ wxRect2D* ptr;
+ if (! wxPyConvertSwigPtr(source, (void **)&ptr, wxT("wxRect2D")))
+ goto error;
+ *obj = ptr;
+ return true;
+ }
+ // otherwise a length-4 sequence of floats is expected
+ if (PySequence_Check(source) && PySequence_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);
+ // This should really check for floats, not numbers -- but that would break code.
+ 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 = wxRect2D(PyFloat_AsDouble(o1), PyFloat_AsDouble(o2),
+ PyFloat_AsDouble(o3), PyFloat_AsDouble(o4));
+ Py_DECREF(o1);
+ Py_DECREF(o2);
+ Py_DECREF(o3);
+ Py_DECREF(o4);
+ return true;
+ }
+ error:
+ PyErr_SetString(PyExc_TypeError, "Expected a 4-tuple of floats or a wx.Rect2D object.");
return false;
}