From: Robin Dunn Date: Wed, 24 Mar 2004 23:09:59 +0000 (+0000) Subject: Changed (again) how the GIL is aquired and the tstate restored. This X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/da32eb53cbe7947f3f4599d7b6b5caa21a68d27f Changed (again) how the GIL is aquired and the tstate restored. This time it's simpler, better, and handles the case where there is a wx calback/event while the GIL has been released by a non-wxPython extension module. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26324 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/contrib/gizmos/gizmos.i b/wxPython/contrib/gizmos/gizmos.i index 19b5392175..34bcf29c82 100644 --- a/wxPython/contrib/gizmos/gizmos.i +++ b/wxPython/contrib/gizmos/gizmos.i @@ -272,7 +272,7 @@ public: virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect) { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "DrawItem"))) { PyObject* dcobj = wxPyMake_wxObject(&dc); PyObject* idobj = wxPyConstructObject((void*)&id, wxT("wxTreeItemId"), False); @@ -282,7 +282,7 @@ public: Py_DECREF(idobj); Py_DECREF(recobj); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxTreeCompanionWindow::DrawItem(dc, id, rect); } @@ -457,7 +457,7 @@ public: const wxTreeItemId& item2) { int rval = 0; bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) { PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), 0); PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), 0); @@ -465,7 +465,7 @@ public: Py_DECREF(o1); Py_DECREF(o2); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) rval = wxTreeListCtrl::OnCompareItems(item1, item2); return rval; @@ -715,7 +715,7 @@ public: //size_t GetSelections(wxArrayTreeItemIds&) const; %extend { PyObject* GetSelections() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* rval = PyList_New(0); wxArrayTreeItemIds array; size_t num, x; @@ -725,7 +725,7 @@ public: PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), True); PyList_Append(rval, item); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } } @@ -749,11 +749,11 @@ public: PyObject* GetFirstChild(const wxTreeItemId& item) { long cookie = 0; wxTreeItemId ritem = self->GetFirstChild(item, cookie); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), true)); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(cookie)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } @@ -764,11 +764,11 @@ public: // passed to GetNextChild in order to continue the search. PyObject* GetNextChild(const wxTreeItemId& item, long cookie) { wxTreeItemId ritem = self->GetNextChild(item, cookie); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), true)); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(cookie)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -877,10 +877,10 @@ public: PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = False) { wxRect rect; if (self->GetBoundingRect(item, rect, textOnly)) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxRect* r = new wxRect(rect); PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return val; } else { diff --git a/wxPython/contrib/ogl/_oglshapes2.i b/wxPython/contrib/ogl/_oglshapes2.i index 15c92da329..cdbb5de507 100644 --- a/wxPython/contrib/ogl/_oglshapes2.i +++ b/wxPython/contrib/ogl/_oglshapes2.i @@ -287,7 +287,7 @@ public: wxObject* wxObj; wxNode* node = list->GetFirst(); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); pyList = PyList_New(0); while (node) { wxObj = node->GetData(); @@ -295,7 +295,7 @@ public: PyList_Append(pyList, pyObj); node = node->GetNext(); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return pyList; } @@ -306,7 +306,7 @@ public: wxObject* wxObj; wxNode* node = list->GetFirst(); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); pyList = PyList_New(0); while (node) { wxObj = node->GetData(); @@ -314,7 +314,7 @@ public: PyList_Append(pyList, pyObj); node = node->GetNext(); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return pyList; } } diff --git a/wxPython/contrib/ogl/ogl.i b/wxPython/contrib/ogl/ogl.i index 66c1277797..1e91d0af7e 100644 --- a/wxPython/contrib/ogl/ogl.i +++ b/wxPython/contrib/ogl/ogl.i @@ -157,17 +157,17 @@ void wxOGLCleanUp(); // work for any class for the VERY generic cases, but beyond that the helper // needs to know more about the type. wxList* wxPy_wxListHelper(PyObject* pyList, const wxChar* className) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (!PyList_Check(pyList)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } int count = PyList_Size(pyList); wxList* list = new wxList; if (! list) { PyErr_SetString(PyExc_MemoryError, "Unable to allocate wxList object"); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } for (int x=0; xAppend(wxo); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return list; } //--------------------------------------------------------------------------- wxList* wxPy_wxRealPoint_ListHelper(PyObject* pyList) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (!PyList_Check(pyList)) { PyErr_SetString(PyExc_TypeError, "Expected a list object."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } int count = PyList_Size(pyList); wxList* list = new wxList; if (! list) { PyErr_SetString(PyExc_MemoryError, "Unable to allocate wxList object"); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } for (int x=0; xAppend((wxObject*) new wxRealPoint(*wxo)); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return list; } @@ -262,7 +262,7 @@ PyObject* wxPy_ConvertShapeList(wxListBase* listbase) { wxObject* wxObj; wxNode* node = list->GetFirst(); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); pyList = PyList_New(0); while (node) { wxObj = node->GetData(); @@ -270,7 +270,7 @@ PyObject* wxPy_ConvertShapeList(wxListBase* listbase) { PyList_Append(pyList, pyObj); node = node->GetNext(); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return pyList; } diff --git a/wxPython/include/wx/wxPython/pyclasses.h b/wxPython/include/wx/wxPython/pyclasses.h index b89991a098..518aab0184 100644 --- a/wxPython/include/wx/wxPython/pyclasses.h +++ b/wxPython/include/wx/wxPython/pyclasses.h @@ -45,7 +45,7 @@ public: wxPyValidator* ptr = NULL; wxPyValidator* self = (wxPyValidator*)this; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(self->m_myInst, "Clone")) { PyObject* ro; ro = wxPyCBH_callCallbackObj(self->m_myInst, Py_BuildValue("()")); @@ -54,7 +54,7 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); // This is very dangerous!!! But is the only way I could find // to squash a memory leak. Currently it is okay, but if the diff --git a/wxPython/include/wx/wxPython/pytree.h b/wxPython/include/wx/wxPython/pytree.h index e8551eec5f..2cd3172e92 100644 --- a/wxPython/include/wx/wxPython/pytree.h +++ b/wxPython/include/wx/wxPython/pytree.h @@ -25,9 +25,9 @@ public: } ~wxPyTreeItemData() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(m_obj); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } PyObject* GetData() { @@ -36,9 +36,9 @@ public: } void SetData(PyObject* obj) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(m_obj); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); m_obj = obj; Py_INCREF(obj); } diff --git a/wxPython/include/wx/wxPython/wxPython.h b/wxPython/include/wx/wxPython/wxPython.h index a9980970db..a52c8697c7 100644 --- a/wxPython/include/wx/wxPython/wxPython.h +++ b/wxPython/include/wx/wxPython/wxPython.h @@ -63,7 +63,7 @@ static void wxPyCoreAPI_IMPORT() { #define wxPyBeginAllowThreads() (wxPyCoreAPIPtr->p_wxPyBeginAllowThreads()) #define wxPyEndAllowThreads(a) (wxPyCoreAPIPtr->p_wxPyEndAllowThreads(a)) #define wxPyBeginBlockThreads() (wxPyCoreAPIPtr->p_wxPyBeginBlockThreads()) -#define wxPyEndBlockThreads() (wxPyCoreAPIPtr->p_wxPyEndBlockThreads()) +#define wxPyEndBlockThreads(a) (wxPyCoreAPIPtr->p_wxPyEndBlockThreads(a)) #define wxPyConstructObject(a,b,c) (wxPyCoreAPIPtr->p_wxPyConstructObject(a,b,c)) #define wxPy_ConvertList(a) (wxPyCoreAPIPtr->p_wxPy_ConvertList(a)) diff --git a/wxPython/include/wx/wxPython/wxPython_int.h b/wxPython/include/wx/wxPython/wxPython_int.h index b5f0d14d68..c3d62ee9b4 100644 --- a/wxPython/include/wx/wxPython/wxPython_int.h +++ b/wxPython/include/wx/wxPython/wxPython_int.h @@ -139,8 +139,8 @@ PyThreadState* wxPyBeginAllowThreads(); void wxPyEndAllowThreads(PyThreadState* state); // For C++ --> Python -void wxPyBeginBlockThreads(); -void wxPyEndBlockThreads(); +bool wxPyBeginBlockThreads(); +void wxPyEndBlockThreads(bool blocked); #endif // wxPyUSE_EXPORTED_API @@ -148,7 +148,7 @@ void wxPyEndBlockThreads(); // A macro that will help to execute simple statments wrapped in // StartBlock/EndBlockThreads calls #define wxPyBLOCK_THREADS(stmt) \ - { wxPyBeginBlockThreads(); stmt; wxPyEndBlockThreads(); } + { bool blocked = wxPyBeginBlockThreads(); stmt; wxPyEndBlockThreads(blocked); } // Raise the NotImplementedError exception (blocking threads) #define wxPyRaiseNotImplemented() \ @@ -377,8 +377,8 @@ struct wxPyCoreAPI { PyThreadState* (*p_wxPyBeginAllowThreads)(); void (*p_wxPyEndAllowThreads)(PyThreadState* state); - void (*p_wxPyBeginBlockThreads)(); - void (*p_wxPyEndBlockThreads)(); + bool (*p_wxPyBeginBlockThreads)(); + void (*p_wxPyEndBlockThreads)(bool blocked); PyObject* (*p_wxPy_ConvertList)(wxListBase* list); @@ -637,10 +637,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME() { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(); \ } \ @@ -658,10 +658,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_INTINT(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(int a, int b) { \ bool rval=False, found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)",a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a,b); \ return rval; \ @@ -680,10 +680,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME() { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(); \ } \ @@ -701,10 +701,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_INTINT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(int a, int b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)",a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b); \ } \ @@ -722,10 +722,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_INT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(int a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)",a)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -743,10 +743,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_INT4(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(int a, int b, int c, int d) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiii)",a,b,c,d)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b,c,d); \ } \ @@ -763,10 +763,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_INT5(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(int a, int b, int c, int d, int e) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiiii)",a,b,c,d,e)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b,c,d,e); \ } \ @@ -785,7 +785,7 @@ extern wxPyApp *wxPythonApp; void CLASS::CBNAME(int* a, int* b) const { \ const char* errmsg = #CBNAME " should return a 2-tuple of integers."; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -807,7 +807,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b); \ } \ @@ -827,7 +827,7 @@ extern wxPyApp *wxPythonApp; wxSize CLASS::CBNAME() const { \ const char* errmsg = #CBNAME " should return a 2-tuple of integers."; \ bool found; wxSize rval(0,0); \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -849,7 +849,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ return PCLASS::CBNAME(); \ else \ @@ -870,10 +870,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_BOOL(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(bool a) { \ bool rval=False, found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)",a));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -892,10 +892,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_INT(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(int a) { \ bool rval=False, found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)",a));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -913,11 +913,11 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_INT_pure(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(int a) { \ bool rval=False; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)",a)); \ else rval = False; \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } @@ -932,13 +932,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DC(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -958,13 +958,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DCBOOL(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, bool b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", obj, (int)b)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b); \ } \ @@ -982,13 +982,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DCBOOL(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, bool b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", obj, (int)b)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b); \ } \ @@ -1006,10 +1006,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__2DBL(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(double a, double b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(dd)",a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b); \ } \ @@ -1027,11 +1027,11 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__2DBL2INT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(double a, double b, int c, int d) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ddii)", \ a,b,c,d)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d); \ } \ @@ -1049,13 +1049,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DC4DBLBOOL(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, double b, double c, double d, double e, bool f) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oddddi)", obj, b, c, d, e, (int)f)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d, e, f); \ } \ @@ -1073,14 +1073,14 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_DC4DBLBOOL(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(wxDC& a, double b, double c, double d, double e, bool f) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ bool rval=False; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oddddi)", obj, b, c, d, e, (int)f));\ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b, c, d, e, f); \ return rval; \ @@ -1099,11 +1099,11 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__BOOL2DBL2INT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(bool a, double b, double c, int d, int e) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iddii)", \ (int)a,b,c,d,e)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d, e); \ } \ @@ -1121,13 +1121,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DC4DBL(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, double b, double c, double d, double e) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Odddd)", obj, b, c, d, e)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d, e); \ } \ @@ -1145,13 +1145,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DCBOOL(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, bool b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", obj, (int)b)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b); \ } \ @@ -1170,13 +1170,13 @@ extern wxPyApp *wxPythonApp; void CLASS::CBNAME(wxControlPoint* a, bool b, double c, double d, \ int e, int f) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oiddii)", obj, (int)b, c, d, e, f));\ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d, e, f); \ } \ @@ -1195,13 +1195,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__WXCP2DBL2INT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxControlPoint* a, double b, double c, int d, int e) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oddii)", obj, b, c, d, e)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d, e); \ } \ @@ -1220,10 +1220,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__2DBLINT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(double a, double b, int c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ddi)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c); \ } \ @@ -1241,10 +1241,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__BOOL2DBLINT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(bool a, double b, double c, int d) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iddi)", (int)a,b,c,d));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a, b, c, d); \ } \ @@ -1262,13 +1262,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__STRING(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(const wxString& a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* s = wx2PyString(a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); \ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -1286,13 +1286,13 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(const wxString& a) { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* s = wx2PyString(a); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); \ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -1309,13 +1309,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_STRING_pure(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(const wxString& a) { \ bool rval=False; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* s = wx2PyString(a); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); \ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ @@ -1327,7 +1327,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_STRING_STRING_pure(CLASS, PCLASS, CBNAME) \ wxString CLASS::CBNAME(const wxString& a) { \ wxString rval; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ PyObject* s = wx2PyString(a); \ @@ -1338,7 +1338,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ @@ -1352,7 +1352,7 @@ extern wxPyApp *wxPythonApp; wxString CLASS::CBNAME(const wxString& a) { \ wxString rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ PyObject* s = wx2PyString(a); \ @@ -1365,7 +1365,7 @@ extern wxPyApp *wxPythonApp; } \ if (! found) \ rval = PCLASS::CBNAME(a); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ @@ -1377,7 +1377,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_STRING_STRINGINT_pure(CLASS, PCLASS, CBNAME) \ wxString CLASS::CBNAME(const wxString& a,int b) { \ wxString rval; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ PyObject* s = wx2PyString(a); \ @@ -1388,7 +1388,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ @@ -1402,7 +1402,7 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(const wxString& a, const wxString& b) { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* s1 = wx2PyString(a); \ PyObject* s2 = wx2PyString(b); \ @@ -1410,7 +1410,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(s1); \ Py_DECREF(s2); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b); \ return rval; \ @@ -1429,7 +1429,7 @@ extern wxPyApp *wxPythonApp; wxString CLASS::CBNAME() { \ wxString rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -1438,7 +1438,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -1457,7 +1457,7 @@ extern wxPyApp *wxPythonApp; wxString CLASS::CBNAME() const { \ wxString rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -1466,7 +1466,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -1483,7 +1483,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_STRING__pure(CLASS, PCLASS, CBNAME) \ wxString CLASS::CBNAME() { \ wxString rval; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -1492,7 +1492,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } @@ -1504,7 +1504,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_STRING__constpure(CLASS, PCLASS, CBNAME) \ wxString CLASS::CBNAME() const { \ wxString rval; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -1513,7 +1513,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } @@ -1526,13 +1526,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_TAG_pure(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(const wxHtmlTag& a) { \ bool rval=False; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* obj = wxPyConstructObject((void*)&a, wxT("wxHtmlTag"), 0); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } @@ -1545,13 +1545,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__CELLINTINT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)cell, wxT("wxHtmlCell"), 0); \ wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(Oii)",obj,x,y)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(cell, x, y); \ } \ @@ -1569,7 +1569,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__CELLINTINTME(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)cell, wxT("wxHtmlCell"), 0); \ PyObject* o2 = wxPyConstructObject((void*)&e, wxT("wxMouseEvent"), 0); \ @@ -1577,7 +1577,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(obj); \ Py_DECREF(o2); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(cell, x, y, e); \ } \ @@ -1595,10 +1595,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK___pure(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME() { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ } //--------------------------------------------------------------------------- @@ -1611,7 +1611,7 @@ extern wxPyApp *wxPythonApp; wxSize CLASS::CBNAME() { \ const char* errmsg = #CBNAME " should return a 2-tuple of integers or a wxSize object."; \ wxSize rval(0,0); \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ wxSize* ptr; \ @@ -1635,7 +1635,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } @@ -1650,13 +1650,13 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(wxWindow* a) { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(a); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -1676,7 +1676,7 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(wxWindow* a, wxDC& b) { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* win = wxPyMake_wxObject(a); \ PyObject* dc = wxPyMake_wxObject(&b); \ @@ -1684,7 +1684,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(win); \ Py_DECREF(dc); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b); \ return rval; \ @@ -1703,13 +1703,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_WXWINBASE(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxWindowBase* a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(a); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -1728,10 +1728,10 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME() { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -1751,10 +1751,10 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME() const { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -1774,10 +1774,10 @@ extern wxPyApp *wxPythonApp; wxDragResult CLASS::CBNAME(wxCoord a, wxCoord b, wxDragResult c) { \ int rval=0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b, c); \ return (wxDragResult)rval; \ @@ -1793,7 +1793,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_FSF_FSSTRING_pure(CLASS, PCLASS, CBNAME) \ wxFSFile* CLASS::CBNAME(wxFileSystem& a,const wxString& b) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ wxFSFile* rval=0; \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ @@ -1808,7 +1808,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(obj); \ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ }; @@ -1823,10 +1823,10 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(wxDragResult a) { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)", a));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -1843,11 +1843,11 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_DR_2WXCDR_pure(CLASS, PCLASS, CBNAME) \ wxDragResult CLASS::CBNAME(wxCoord a, wxCoord b, wxDragResult c) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ int rval=0; \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return (wxDragResult)rval; \ } \ @@ -1859,13 +1859,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_INTINTSTR_pure(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(int a, int b, const wxString& c) { \ bool rval=False; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* s = wx2PyString(c); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",a,b,s));\ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ @@ -1880,10 +1880,10 @@ extern wxPyApp *wxPythonApp; size_t CLASS::CBNAME() { \ size_t rval=0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -1903,10 +1903,10 @@ extern wxPyApp *wxPythonApp; size_t CLASS::CBNAME() const { \ size_t rval=0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -1926,7 +1926,7 @@ extern wxPyApp *wxPythonApp; wxDataFormat CLASS::CBNAME(size_t a) { \ wxDataFormat rval=0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ wxDataFormat* ptr; \ @@ -1937,7 +1937,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -1956,13 +1956,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__constany(CLASS, PCLASS, CBNAME, Type) \ void CLASS::CBNAME(const Type& a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -1981,13 +1981,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__any(CLASS, PCLASS, CBNAME, Type) \ void CLASS::CBNAME(Type& a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -2006,13 +2006,13 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(Type& a) { \ bool rv=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rv = PCLASS::CBNAME(a); \ return rv; \ @@ -2030,13 +2030,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_bool_anypure(CLASS, PCLASS, CBNAME, Type) \ bool CLASS::CBNAME(Type& a) { \ bool rv=False; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* obj = wxPyConstructObject((void*)&a, wxT(#Type), 0); \ rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rv; \ } \ @@ -2050,7 +2050,7 @@ extern wxPyApp *wxPythonApp; wxString CLASS::CBNAME(long a, long b) const { \ wxString rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(ll)",a,b)); \ @@ -2059,7 +2059,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a,b); \ return rval; \ @@ -2079,7 +2079,7 @@ extern wxPyApp *wxPythonApp; int CLASS::CBNAME(long a) const { \ int rval=-1; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(l)",a)); \ @@ -2088,7 +2088,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -2109,7 +2109,7 @@ extern wxPyApp *wxPythonApp; wxListItemAttr *CLASS::CBNAME(long a) const { \ wxListItemAttr *rval = NULL; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ wxListItemAttr* ptr; \ @@ -2120,7 +2120,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -2139,7 +2139,7 @@ extern wxPyApp *wxPythonApp; bool CLASS::CBNAME(wxMouseEvent& e) { \ bool rval=False; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ PyObject* obj = wxPyConstructObject((void*)&e, wxT("wxMouseEvent"), 0); \ @@ -2150,7 +2150,7 @@ extern wxPyApp *wxPythonApp; } \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ return PCLASS::CBNAME(e); \ return rval; \ @@ -2168,7 +2168,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_WIZPG__pure(CLASS, PCLASS, CBNAME) \ wxWizardPage* CLASS::CBNAME() const { \ wxWizardPage* rv = NULL; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -2177,7 +2177,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rv; \ } @@ -2189,7 +2189,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BITMAP__pure(CLASS, PCLASS, CBNAME) \ wxBitmap CLASS::CBNAME() const { \ wxBitmap rv; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ wxBitmap* ptr; \ @@ -2200,7 +2200,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rv; \ } @@ -2212,7 +2212,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_OBJECT__pure(CLASS, PCLASS, CBNAME) \ wxObject* CLASS::CBNAME() { \ wxObject* rv = NULL; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); \ @@ -2221,7 +2221,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rv; \ } @@ -2233,7 +2233,7 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_OBJECT_STRING_pure(CLASS, PCLASS, CBNAME) \ wxObject* CLASS::CBNAME(const wxString& a) { \ wxObject* rv = NULL; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* so = wx2PyString(a); \ PyObject* ro; \ @@ -2244,7 +2244,7 @@ extern wxPyApp *wxPythonApp; } \ Py_DECREF(so); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rv; \ } @@ -2257,13 +2257,13 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_BOOL_NODE_pure(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(wxXmlNode* a) { \ bool rv=False; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* obj = wxPyConstructObject((void*)a, wxT("wxXmlNode"), 0); \ rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rv; \ } \ @@ -2277,11 +2277,11 @@ extern wxPyApp *wxPythonApp; wxCoord CLASS::CBNAME(size_t a) const { \ wxCoord rval=0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)", a)); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ @@ -2295,10 +2295,10 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK_VOID_SIZETSIZET_const(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(size_t a, size_t b) const { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)",a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b); \ } \ @@ -2317,10 +2317,10 @@ extern wxPyApp *wxPythonApp; wxCoord CLASS::CBNAME() const { \ wxCoord rval=0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -2338,14 +2338,14 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DCRECTSIZET_constpure(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, const wxRect& b, size_t c) const { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ PyObject* ro = wxPyConstructObject((void*)&b, wxT("wxRect"), 0); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOi)", obj, ro, (int)c)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ } \ //--------------------------------------------------------------------------- @@ -2358,14 +2358,14 @@ extern wxPyApp *wxPythonApp; #define IMP_PYCALLBACK__DCRECTSIZET_const(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxDC& a, const wxRect& b, size_t c) const { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxObject(&a); \ PyObject* ro = wxPyConstructObject((void*)&b, wxT("wxRect"), 0); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOi)", obj, ro, (int)c)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -2384,7 +2384,7 @@ extern wxPyApp *wxPythonApp; wxString CLASS::CBNAME(size_t a) const { \ wxString rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(l)",a)); \ @@ -2393,7 +2393,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -2411,7 +2411,7 @@ extern wxPyApp *wxPythonApp; wxString CLASS::CBNAME(size_t a) const { \ wxString rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(l)",a)); \ @@ -2420,7 +2420,7 @@ extern wxPyApp *wxPythonApp; Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } \ diff --git a/wxPython/samples/embedded/embedded.cpp b/wxPython/samples/embedded/embedded.cpp index 0a3dc40d07..44ec367059 100644 --- a/wxPython/samples/embedded/embedded.cpp +++ b/wxPython/samples/embedded/embedded.cpp @@ -41,8 +41,6 @@ public: virtual bool OnInit(); virtual ~MyApp(); void Init_wxPython(); -private: - PyThreadState* m_mainTState; }; @@ -91,14 +89,14 @@ void MyApp::Init_wxPython() // Save the current Python thread state and release the // Global Interpreter Lock. - m_mainTState = wxPyBeginAllowThreads(); + wxPyBeginAllowThreads(); } MyApp::~MyApp() { // Restore the thread state and tell Python to cleanup after itself. - wxPyEndAllowThreads(m_mainTState); + wxPyEndAllowThreads(true); Py_Finalize(); } @@ -176,13 +174,13 @@ void MyFrame::OnPyFrame(wxCommandEvent& event) // First, whenever you do anyting with Python objects or code, you // *MUST* aquire the Global Interpreter Lock and block other // Python threads from running. - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); // Execute the code in the __main__ module PyRun_SimpleString(python_code1); // Finally, release the GIL and let other Python threads run. - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -197,9 +195,9 @@ from wxPython.wx import wxPyOnDemandOutputWindow\n\ output = wxPyOnDemandOutputWindow()\n\ sys.stdin = sys.stderr = output\n\ "; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyRun_SimpleString(python_redirect); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -226,7 +224,7 @@ wxWindow* MyFrame::DoPythonStuff(wxWindow* parent) PyObject* result; // As always, first grab the GIL - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); // Now make a dictionary to serve as the global namespace when the code is // executed. Put a reference to the builtins module in it. (Yes, the @@ -277,7 +275,7 @@ wxWindow* MyFrame::DoPythonStuff(wxWindow* parent) Py_DECREF(tuple); // Finally, after all Python stuff is done, release the GIL - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return window; } diff --git a/wxPython/src/_artprov.i b/wxPython/src/_artprov.i index 4e8091e701..1f6fe34cf3 100644 --- a/wxPython/src/_artprov.i +++ b/wxPython/src/_artprov.i @@ -75,7 +75,7 @@ public: const wxArtClient& client, const wxSize& size) { wxBitmap rval = wxNullBitmap; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((wxPyCBH_findCallback(m_myInst, "CreateBitmap"))) { PyObject* so = wxPyConstructObject((void*)&size, wxT("wxSize"), 0); PyObject* ro; @@ -93,7 +93,7 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } diff --git a/wxPython/src/_dataobj.i b/wxPython/src/_dataobj.i index 4a9813dba9..3730132cb2 100644 --- a/wxPython/src/_dataobj.i +++ b/wxPython/src/_dataobj.i @@ -238,7 +238,7 @@ bool wxPyDataObjectSimple::GetDataHere(void *buf) const { // C++ version. bool rval = False; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "GetDataHere")) { PyObject* ro; ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); @@ -249,7 +249,7 @@ bool wxPyDataObjectSimple::GetDataHere(void *buf) const { Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } @@ -257,13 +257,13 @@ bool wxPyDataObjectSimple::SetData(size_t len, const void *buf) const{ // For this one we simply need to make a string from buf and len // and send it to the Python method. bool rval = False; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "SetData")) { PyObject* data = PyString_FromStringAndSize((char*)buf, len); rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", data)); Py_DECREF(data); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } %} @@ -364,7 +364,7 @@ public: wxBitmap wxPyBitmapDataObject::GetBitmap() const { wxBitmap* rval = &wxNullBitmap; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "GetBitmap")) { PyObject* ro; wxBitmap* ptr; @@ -375,18 +375,18 @@ wxBitmap wxPyBitmapDataObject::GetBitmap() const { Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return *rval; } void wxPyBitmapDataObject::SetBitmap(const wxBitmap& bitmap) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "SetBitmap")) { PyObject* bo = wxPyConstructObject((void*)&bitmap, wxT("wxBitmap"), False); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", bo)); Py_DECREF(bo); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } %} diff --git a/wxPython/src/_display.i b/wxPython/src/_display.i index 04ad845301..433e5762cb 100644 --- a/wxPython/src/_display.i +++ b/wxPython/src/_display.i @@ -163,14 +163,14 @@ platform."); PyObject* GetModes(const wxVideoMode& mode = wxDefaultVideoMode) { PyObject* pyList = NULL; wxArrayVideoModes arr = self->GetModes(mode); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); pyList = PyList_New(0); for (int i=0; i < arr.GetCount(); i++) { wxVideoMode* m = new wxVideoMode(arr.Item(i)); PyObject* pyObj = wxPyConstructObject(m, wxT("wxVideoMode"), true); PyList_Append(pyList, pyObj); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return pyList; } } diff --git a/wxPython/src/_dnd.i b/wxPython/src/_dnd.i index c109240212..cf7c3c84b9 100644 --- a/wxPython/src/_dnd.i +++ b/wxPython/src/_dnd.i @@ -217,13 +217,13 @@ public: bool wxPyFileDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames) { bool rval = False; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "OnDropFiles")) { PyObject* list = wxArrayString2PyList_helper(filenames); rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",x,y,list)); Py_DECREF(list); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } diff --git a/wxPython/src/_gbsizer.i b/wxPython/src/_gbsizer.i index f37af674e1..812b9ac820 100644 --- a/wxPython/src/_gbsizer.i +++ b/wxPython/src/_gbsizer.i @@ -88,11 +88,11 @@ public: } PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->GetRow())); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->GetCol())); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -145,11 +145,11 @@ public: } PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->GetRowspan())); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->GetColspan())); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -268,11 +268,11 @@ public: PyObject* userData = NULL ) { wxPyUserData* data = NULL; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxPySizerItemInfo info = wxPySizerItemTypeHelper(item, True, False); if ( userData && (info.window || info.sizer || info.gotSize) ) data = new wxPyUserData(userData); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); // Now call the real Add method if a valid item type was found if ( info.window ) diff --git a/wxPython/src/_gdicmn.i b/wxPython/src/_gdicmn.i index 4bbbe4a686..5ccbf5d5ba 100644 --- a/wxPython/src/_gdicmn.i +++ b/wxPython/src/_gdicmn.i @@ -178,11 +178,11 @@ public: "Get() -> (width,height)", "Returns the width and height properties as a tuple."); PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x)); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -251,11 +251,11 @@ public: "Get() -> (x,y)", "Return the x and y properties as a tuple. "); PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, PyFloat_FromDouble(self->x)); PyTuple_SET_ITEM(tup, 1, PyFloat_FromDouble(self->y)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -364,11 +364,11 @@ public: "Get() -> (x,y)", "Return the x and y properties as a tuple. "); PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x)); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -532,13 +532,13 @@ public: "Get() -> (x,y,width,height)", "Return the rectangle properties as a tuple."); PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(4); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x)); PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y)); PyTuple_SET_ITEM(tup, 2, PyInt_FromLong(self->width)); PyTuple_SET_ITEM(tup, 3, PyInt_FromLong(self->height)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -576,10 +576,10 @@ DocAStr(wxIntersectRect, dest = reg1.GetBox(); if (dest != wxRect(0,0,0,0)) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxRect* newRect = new wxRect(dest); obj = wxPyConstructObject((void*)newRect, wxT("wxRect"), True); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return obj; } Py_INCREF(Py_None); @@ -663,11 +663,11 @@ public: "Get() -> (x,y)", "Return x and y properties as a tuple."); PyObject* Get() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, PyFloat_FromDouble(self->m_x)); PyTuple_SET_ITEM(tup, 1, PyFloat_FromDouble(self->m_y)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } diff --git a/wxPython/src/_image.i b/wxPython/src/_image.i index cdf9ecebb8..1655963fc4 100644 --- a/wxPython/src/_image.i +++ b/wxPython/src/_image.i @@ -204,7 +204,7 @@ public: unsigned char* buffer; int size; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (!PyArg_Parse(data, "t#", &buffer, &size)) goto done; @@ -214,7 +214,7 @@ public: } self->SetData(buffer); done: - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -258,7 +258,7 @@ public: unsigned char* buffer; int size; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (!PyArg_Parse(data, "t#", &buffer, &size)) goto done; @@ -268,7 +268,7 @@ public: } self->SetAlpha(buffer); done: - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } } diff --git a/wxPython/src/_joystick.i b/wxPython/src/_joystick.i index fe2da5c0fd..b47bdb444b 100644 --- a/wxPython/src/_joystick.i +++ b/wxPython/src/_joystick.i @@ -48,10 +48,10 @@ enum class wxJoystick : public wxObject { public: wxJoystick(int joystick = wxJOYSTICK1) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_NotImplementedError, "wxJoystick is not available on this platform."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } wxPoint GetPosition() { return wxPoint(-1,-1); } int GetZPosition() { return -1; } diff --git a/wxPython/src/_listctrl.i b/wxPython/src/_listctrl.i index afb29a1ea2..d95360d13a 100644 --- a/wxPython/src/_listctrl.i +++ b/wxPython/src/_listctrl.i @@ -341,7 +341,7 @@ EVT_LIST_ITEM_FOCUSED = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_FOCUSED static int wxCALLBACK wxPyListCtrl_SortItems(long item1, long item2, long funcPtr) { int retval = 0; PyObject* func = (PyObject*)funcPtr; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* args = Py_BuildValue("(ii)", item1, item2); PyObject* result = PyEval_CallObject(func, args); @@ -351,7 +351,7 @@ EVT_LIST_ITEM_FOCUSED = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_FOCUSED Py_DECREF(result); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return retval; } %} diff --git a/wxPython/src/_log.i b/wxPython/src/_log.i index 7960ba69f2..96214b20f6 100644 --- a/wxPython/src/_log.i +++ b/wxPython/src/_log.i @@ -250,26 +250,26 @@ public: virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t) { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "DoLog"))) { PyObject* s = wx2PyString(szString); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iOi)", level, s, t)); Py_DECREF(s); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxLog::DoLog(level, szString, t); } virtual void DoLogString(const wxChar *szString, time_t t) { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "DoLogString"))) { PyObject* s = wx2PyString(szString); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", s, t)); Py_DECREF(s); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxLog::DoLogString(szString, t); } diff --git a/wxPython/src/_mimetype.i b/wxPython/src/_mimetype.i index 4dbe41f1f2..de52e6af84 100644 --- a/wxPython/src/_mimetype.i +++ b/wxPython/src/_mimetype.i @@ -190,13 +190,13 @@ public: iconIndex = loc.GetIndex(); #endif // Make a tuple and put the values in it - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tuple = PyTuple_New(3); PyTuple_SetItem(tuple, 0, wxPyConstructObject(new wxIcon(loc), wxT("wxIcon"), True)); PyTuple_SetItem(tuple, 1, wx2PyString(iconFile)); PyTuple_SetItem(tuple, 2, PyInt_FromLong(iconIndex)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tuple; } else @@ -250,11 +250,11 @@ public: wxArrayString commands; if (self->GetAllCommands(&verbs, &commands, wxFileType::MessageParameters(filename, mimetype))) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tuple = PyTuple_New(2); PyTuple_SetItem(tuple, 0, wxArrayString2PyList_helper(verbs)); PyTuple_SetItem(tuple, 1, wxArrayString2PyList_helper(commands)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tuple; } else diff --git a/wxPython/src/_pen.i b/wxPython/src/_pen.i index 757872a251..911f63d1d0 100644 --- a/wxPython/src/_pen.i +++ b/wxPython/src/_pen.i @@ -54,11 +54,11 @@ public: PyObject* GetDashes() { wxDash* dashes; int count = self->GetDashes(&dashes); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* retval = PyList_New(0); for (int x=0; xRemove(info.window); else if ( info.sizer ) @@ -252,9 +252,9 @@ public: void _SetItemMinSize(PyObject* item, const wxSize& size) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxPySizerItemInfo info = wxPySizerItemTypeHelper(item, False, True); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if ( info.window ) self->SetItemMinSize(info.window, size); else if ( info.sizer ) diff --git a/wxPython/src/_sound.i b/wxPython/src/_sound.i index 8e938e3824..e120cf52a8 100644 --- a/wxPython/src/_sound.i +++ b/wxPython/src/_sound.i @@ -38,22 +38,22 @@ class wxSound : public wxObject { public: wxSound() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_NotImplementedError, "wxSound is not available on this platform."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } wxSound(const wxString&, bool) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_NotImplementedError, "wxSound is not available on this platform."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } wxSound(int, const wxByte*) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_NotImplementedError, "wxSound is not available on this platform."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } ~wxSound() {}; @@ -92,10 +92,10 @@ public: #else %extend { bool Create(int size, const wxByte* data) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_NotImplementedError, "Create from data is not available on this platform."); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return False; } } diff --git a/wxPython/src/_timer.i b/wxPython/src/_timer.i index 15f8abe230..b613bbc630 100644 --- a/wxPython/src/_timer.i +++ b/wxPython/src/_timer.i @@ -36,10 +36,10 @@ enum { void wxPyTimer::Notify() { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "Notify"))) wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxTimer::Notify(); } diff --git a/wxPython/src/_treectrl.i b/wxPython/src/_treectrl.i index 253b6303ff..5f311d954c 100644 --- a/wxPython/src/_treectrl.i +++ b/wxPython/src/_treectrl.i @@ -286,7 +286,7 @@ public: const wxTreeItemId& item2) { int rval = 0; bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) { PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), False); PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), False); @@ -294,7 +294,7 @@ public: Py_DECREF(o1); Py_DECREF(o2); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) rval = wxTreeCtrl::OnCompareItems(item1, item2); return rval; @@ -501,7 +501,7 @@ public: // NB: this operation is expensive and can take a long time for a // control with a lot of items (~ O(number of items)). PyObject* GetSelections() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* rval = PyList_New(0); wxArrayTreeItemIds array; size_t num, x; @@ -511,7 +511,7 @@ public: PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), True); PyList_Append(rval, item); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } } @@ -528,11 +528,11 @@ public: PyObject* GetFirstChild(const wxTreeItemId& item) { void* cookie = 0; wxTreeItemId* ritem = new wxTreeItemId(self->GetFirstChild(item, cookie)); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), True)); PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void"))); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } @@ -543,11 +543,11 @@ public: // passed to GetNextChild in order to continue the search. PyObject* GetNextChild(const wxTreeItemId& item, void* cookie) { wxTreeItemId* ritem = new wxTreeItemId(self->GetNextChild(item, cookie)); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), True)); PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void"))); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } @@ -696,10 +696,10 @@ public: PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = False) { wxRect rect; if (self->GetBoundingRect(item, rect, textOnly)) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxRect* r = new wxRect(rect); PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), True); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return val; } else diff --git a/wxPython/src/calendar.i b/wxPython/src/calendar.i index b98a1e330a..3a91233610 100644 --- a/wxPython/src/calendar.i +++ b/wxPython/src/calendar.i @@ -352,12 +352,12 @@ validity of the remaining two values. The result codes are: wxDateTime* date = new wxDateTime; wxDateTime::WeekDay wd; wxCalendarHitTestResult result = self->HitTest(pos, date, &wd); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(3); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(result)); PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(date, wxT("wxDateTime"), 1)); PyTuple_SET_ITEM(tup, 2, PyInt_FromLong(wd)); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return tup; } } diff --git a/wxPython/src/drawlist.cpp b/wxPython/src/drawlist.cpp index b0516571e9..724359e98a 100644 --- a/wxPython/src/drawlist.cpp +++ b/wxPython/src/drawlist.cpp @@ -30,7 +30,7 @@ void wxPyDrawList_SetAPIPtr() PyObject* wxPyDrawXXXList(wxDC& dc, wxPyDrawListOp_t doDraw, PyObject* pyCoords, PyObject* pyPens, PyObject* pyBrushes) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); bool isFastSeq = PyList_Check(pyCoords) || PyTuple_Check(pyCoords); bool isFastPens = PyList_Check(pyPens) || PyTuple_Check(pyPens); @@ -138,7 +138,7 @@ PyObject* wxPyDrawXXXList(wxDC& dc, wxPyDrawListOp_t doDraw, exit: - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return retval; } @@ -214,7 +214,7 @@ bool wxPyDrawXXXPolygon(wxDC& dc, PyObject* coords) PyObject* wxPyDrawTextList(wxDC& dc, PyObject* textList, PyObject* pyPoints, PyObject* foregroundList, PyObject* backgroundList) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); bool isFastSeq = PyList_Check(pyPoints) || PyTuple_Check(pyPoints); bool isFastText = PyList_Check(textList) || PyTuple_Check(textList); @@ -353,7 +353,7 @@ PyObject* wxPyDrawTextList(wxDC& dc, PyObject* textList, PyObject* pyPoints, PyO goto exit; exit: - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return retval; } diff --git a/wxPython/src/grid.i b/wxPython/src/grid.i index f6694b7a58..d7d4d4bca3 100644 --- a/wxPython/src/grid.i +++ b/wxPython/src/grid.i @@ -93,7 +93,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) wxGridCellAttr* CBNAME(int a, int b, wxGridCellAttr::wxAttrKind c) { \ wxGridCellAttr* rval = NULL; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ wxGridCellAttr* ptr; \ @@ -104,7 +104,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b, c); \ return rval; \ @@ -117,14 +117,14 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__GCAINTINT(PCLASS, CBNAME) \ void CBNAME(wxGridCellAttr *attr, int a, int b) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ bool found; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxGridCellAttr(attr); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oii)", obj, a, b)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(attr, a, b); \ } \ @@ -136,14 +136,14 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__GCAINT(PCLASS, CBNAME) \ void CBNAME(wxGridCellAttr *attr, int val) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ bool found; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyMake_wxGridCellAttr(attr); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", obj, val)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(attr, val); \ } \ @@ -155,11 +155,11 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK_INT__pure(CBNAME) \ int CBNAME() { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ int rval = 0; \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } @@ -167,18 +167,18 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK_BOOL_INTINT_pure(CBNAME) \ bool CBNAME(int a, int b) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ bool rval = 0; \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)",a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } #define PYCALLBACK_STRING_INTINT_pure(CBNAME) \ wxString CBNAME(int a, int b) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ wxString rval; \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ @@ -188,27 +188,27 @@ wxPyMake_TEMPLATE(wxGridTableBase) Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ return rval; \ } #define PYCALLBACK__INTINTSTRING_pure(CBNAME) \ void CBNAME(int a, int b, const wxString& c) { \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* s = wx2PyString(c); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",a,b,s));\ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ } #define PYCALLBACK_STRING_INTINT(PCLASS, CBNAME) \ wxString CBNAME(int a, int b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ wxString rval; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ @@ -218,7 +218,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b); \ return rval; \ @@ -232,13 +232,13 @@ wxPyMake_TEMPLATE(wxGridTableBase) bool CBNAME(int a, int b, const wxString& c) { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* s = wx2PyString(c); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",a,b,s));\ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a,b,c); \ return rval; \ @@ -254,10 +254,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) long CBNAME(int a, int b) { \ long rval; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)", a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a,b); \ return rval; \ @@ -272,10 +272,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) bool CBNAME(int a, int b) { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)", a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a,b); \ return rval; \ @@ -289,7 +289,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK_DOUBLE_INTINT(PCLASS, CBNAME) \ double CBNAME(int a, int b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ double rval; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ @@ -300,7 +300,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) Py_DECREF(ro); Py_DECREF(str); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a, b); \ return rval; \ @@ -314,10 +314,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__(PCLASS, CBNAME) \ void CBNAME() { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(); \ } \ @@ -332,10 +332,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) bool CBNAME(size_t a, size_t b) { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)", a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a,b); \ return rval; \ @@ -350,10 +350,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) bool CBNAME(size_t a) { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)", a)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -366,7 +366,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK_STRING_INT(PCLASS, CBNAME) \ wxString CBNAME(int a) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ wxString rval; \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* ro; \ @@ -376,7 +376,7 @@ wxPyMake_TEMPLATE(wxGridTableBase) Py_DECREF(ro); \ } \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -389,13 +389,13 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__INTSTRING(PCLASS, CBNAME) \ void CBNAME(int a, const wxString& c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* s = wx2PyString(c); \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)",a,s)); \ Py_DECREF(s); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,c); \ } \ @@ -410,10 +410,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) bool CBNAME() { \ bool rval = 0; \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ rval = PCLASS::CBNAME(); \ return rval; \ @@ -427,10 +427,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__SIZETINT(PCLASS, CBNAME) \ void CBNAME(size_t a, int b) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(ii)", a,b)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b); \ } \ @@ -444,10 +444,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__INTINTLONG(PCLASS, CBNAME) \ void CBNAME(int a, int b, long c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -461,10 +461,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__INTINTDOUBLE(PCLASS, CBNAME) \ void CBNAME(int a, int b, double c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iif)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -477,10 +477,10 @@ wxPyMake_TEMPLATE(wxGridTableBase) #define PYCALLBACK__INTINTBOOL(PCLASS, CBNAME) \ void CBNAME(int a, int b, bool c) { \ bool found; \ - wxPyBeginBlockThreads(); \ + bool blocked = wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", a,b,c)); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(blocked); \ if (! found) \ PCLASS::CBNAME(a,b,c); \ } \ @@ -558,7 +558,7 @@ public: void Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc, const wxRect& rect, int row, int col, bool isSelected) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "Draw")) { PyObject* go = wxPyMake_wxObject(&grid); PyObject* dco = wxPyMake_wxObject(&dc); @@ -572,13 +572,13 @@ public: Py_DECREF(dco); Py_DECREF(ro); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } wxSize GetBestSize(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc, int row, int col) { wxSize rval; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "GetBestSize")) { PyObject* ro; wxSize* ptr; @@ -614,14 +614,14 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } wxGridCellRenderer *Clone() const { wxGridCellRenderer* rval = NULL; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "Clone")) { PyObject* ro; wxGridCellRenderer* ptr; @@ -632,7 +632,7 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } @@ -774,7 +774,7 @@ public: wxPyGridCellEditor() : wxGridCellEditor() {} void Create(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "Create")) { PyObject* po = wxPyMake_wxObject(parent); PyObject* eo = wxPyMake_wxObject(evtHandler); @@ -783,37 +783,37 @@ public: Py_DECREF(po); Py_DECREF(eo); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void BeginEdit(int row, int col, wxGrid* grid) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "BeginEdit")) { PyObject* go = wxPyMake_wxObject(grid); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)", row, col, go)); Py_DECREF(go); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } bool EndEdit(int row, int col, wxGrid* grid) { bool rv = False; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "EndEdit")) { PyObject* go = wxPyMake_wxObject(grid); rv = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)", row, col, go)); Py_DECREF(go); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rv; } wxGridCellEditor* Clone() const { wxGridCellEditor* rval = NULL; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "Clone")) { PyObject* ro; wxGridCellEditor* ptr; @@ -824,20 +824,20 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } void Show(bool show, wxGridCellAttr *attr) { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "Show"))) { PyObject* ao = wxPyMake_wxGridCellAttr(attr); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)", show, ao)); Py_DECREF(ao); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxGridCellEditor::Show(show, attr); } @@ -848,7 +848,7 @@ public: void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr) { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "PaintBackground)"))) { PyObject* ao = wxPyMake_wxGridCellAttr(attr); PyObject* ro = wxPyConstructObject((void*)&rectCell, wxT("wxRect"), 0); @@ -858,7 +858,7 @@ public: Py_DECREF(ro); Py_DECREF(ao); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxGridCellEditor::PaintBackground(rectCell, attr); } @@ -1213,7 +1213,7 @@ public: wxString GetValue(int row, int col) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxString rval; if (wxPyCBH_findCallback(m_myInst, "GetValue")) { PyObject* ro; @@ -1223,18 +1223,18 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } void SetValue(int row, int col, const wxString& val) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "SetValue")) { PyObject* s = wx2PyString(val); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",row,col,s)); Py_DECREF(s); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -1242,7 +1242,7 @@ public: // the GetValue and SetValue python methods. long GetValueAsLong( int row, int col ) { long rval = 0; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "GetValue")) { PyObject* ro; PyObject* num; @@ -1256,13 +1256,13 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } double GetValueAsDouble( int row, int col ) { double rval = 0.0; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "GetValue")) { PyObject* ro; PyObject* num; @@ -1276,7 +1276,7 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } @@ -1285,19 +1285,19 @@ public: } void SetValueAsLong( int row, int col, long value ) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "SetValue")) { wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iii)", row, col, value)); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void SetValueAsDouble( int row, int col, double value ) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "SetValue")) { wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iid)", row, col, value)); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void SetValueAsBool( int row, int col, bool value ) { diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index 628046c2af..81c954bc70 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -53,10 +53,9 @@ bool wxPyDoingCleanup = False; struct wxPyThreadState { unsigned long tid; PyThreadState* tstate; - int blocked; wxPyThreadState(unsigned long _tid=0, PyThreadState* _tstate=NULL) - : tid(_tid), tstate(_tstate), blocked(1) {} + : tid(_tid), tstate(_tstate) {} }; #include @@ -137,20 +136,20 @@ int wxPyApp::MainLoop() { bool wxPyApp::OnInitGui() { bool rval=True; wxApp::OnInitGui(); // in this case always call the base class version - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "OnInitGui")) rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } int wxPyApp::OnExit() { int rval=0; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "OnExit")) rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); wxApp::OnExit(); // in this case always call the base class version return rval; } @@ -178,7 +177,7 @@ void wxPyApp::OnAssert(const wxChar *file, // If the OnAssert is overloaded in the Python class then call it... bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnAssert"))) { PyObject* fso = wx2PyString(file); PyObject* cso = wx2PyString(file); @@ -193,7 +192,7 @@ void wxPyApp::OnAssert(const wxChar *file, Py_DECREF(cso); Py_DECREF(mso); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); // ...otherwise do our own thing with it if (! found) { @@ -212,11 +211,11 @@ void wxPyApp::OnAssert(const wxChar *file, } // set the exception - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* s = wx2PyString(buf); PyErr_SetObject(wxPyAssertionError, s); Py_DECREF(s); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); // Now when control returns to whatever API wrapper was called from // Python it should detect that an exception is set and will return @@ -247,40 +246,40 @@ void wxPyApp::OnAssert(const wxChar *file, // For catching Apple Events void wxPyApp::MacOpenFile(const wxString &fileName) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "MacOpenFile")) { PyObject* s = wx2PyString(fileName); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); Py_DECREF(s); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void wxPyApp::MacPrintFile(const wxString &fileName) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "MacPrintFile")) { PyObject* s = wx2PyString(fileName); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); Py_DECREF(s); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void wxPyApp::MacNewFile() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "MacNewFile")) wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void wxPyApp::MacReopenApp() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "MacReopenApp")) wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -377,7 +376,7 @@ void wxPyApp::_BootstrapApp() // Get any command-line args passed to this program from the sys module int argc = 0; char** argv = NULL; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* sysargv = PySys_GetObject("argv"); if (sysargv != NULL) { argc = PyList_Size(sysargv); @@ -389,12 +388,12 @@ void wxPyApp::_BootstrapApp() } argv[argc] = NULL; } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); result = wxEntryStart(argc, argv); delete [] argv; - wxPyBeginBlockThreads(); + blocked = wxPyBeginBlockThreads(); if (! result) { PyErr_SetString(PyExc_SystemError, "wxEntryStart failed!"); goto error; @@ -439,7 +438,7 @@ void wxPyApp::_BootstrapApp() Py_XDECREF(retval); Py_XDECREF(pyint); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); }; //--------------------------------------------------------------------- @@ -793,19 +792,19 @@ void wxPy_ReinitStockObjects(int pass) void wxPyClientData_dtor(wxPyClientData* self) { if (! wxPyDoingCleanup) { // Don't do it during cleanup as Python // may have already garbage collected the object... - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(self->m_obj); self->m_obj = NULL; - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } } void wxPyUserData_dtor(wxPyUserData* self) { if (! wxPyDoingCleanup) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(self->m_obj); self->m_obj = NULL; - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } } @@ -822,7 +821,7 @@ void wxPyOORClientData_dtor(wxPyOORClientData* self) { static PyObject* deadObjectClass = NULL; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (deadObjectClass == NULL) { deadObjectClass = PyDict_GetItemString(wxPython_dict, "_wxPyDeadObject"); // TODO: Can not wxASSERT here because inside a wxPyBeginBlock Threads, @@ -867,7 +866,7 @@ void wxPyOORClientData_dtor(wxPyOORClientData* self) { } // m_obj is DECREF'd in the base class dtor... - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -1038,7 +1037,6 @@ PyThreadState* wxPyBeginAllowThreads() { #ifdef WXP_WITH_THREAD PyThreadState* saved = PyEval_SaveThread(); // Py_BEGIN_ALLOW_THREADS; wxPySaveThreadState(saved); - wxPyGetThreadState()->blocked -= 1; return saved; #else return NULL; @@ -1047,7 +1045,6 @@ PyThreadState* wxPyBeginAllowThreads() { void wxPyEndAllowThreads(PyThreadState* saved) { #ifdef WXP_WITH_THREAD - wxPyGetThreadState()->blocked += 1; PyEval_RestoreThread(saved); // Py_END_ALLOW_THREADS; #endif } @@ -1057,21 +1054,34 @@ void wxPyEndAllowThreads(PyThreadState* saved) { // Calls from wxWindows back to Python code, or even any PyObject // manipulations, PyDECREF's and etc. are wrapped in calls to these functions: -void wxPyBeginBlockThreads() { +bool wxPyBeginBlockThreads() { #ifdef WXP_WITH_THREAD - wxPyThreadState* tstate = wxPyGetThreadState(); - if (tstate->blocked++ == 0) { // if nested calls then do nothing + // This works in for 2.3, maybe a good alternative to find the needed tstate? + // PyThreadState *check = PyGILState_GetThisThreadState(); + + // get the currect tstate by swapping in NULL and then putting it back. + PyThreadState *current = PyThreadState_Swap(NULL); + PyThreadState_Swap(current); + + // Only block if there wasn't alrady a tstate. This cen happen with + // nested calls to wxPyBeginBlockThreads + bool blocked = false; + if (current == NULL) { + wxPyThreadState* tstate = wxPyGetThreadState(); PyEval_RestoreThread(tstate->tstate); + blocked = true; } + return blocked; #endif } -void wxPyEndBlockThreads() { +void wxPyEndBlockThreads(bool blocked) { #ifdef WXP_WITH_THREAD - wxPyThreadState* tstate = wxPyGetThreadState(); - tstate->blocked -= 1; - if ( tstate->blocked == 0) { // if nested calls then do nothing + // Only unblock if we blocked in the last call to wxPyBeginBlockThreads. + // The value of blocked passed in needs to be the same as that returned + // from wxPyBeginBlockThreads at the same nesting level. + if ( blocked ) { PyEval_SaveThread(); } #endif @@ -1111,9 +1121,9 @@ PyObject* wxPyInputStream::read(int size) { // check if we have a real wxInputStream to work with if (!m_wxis) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_IOError, "no valid C-wxInputStream"); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } @@ -1130,7 +1140,7 @@ PyObject* wxPyInputStream::read(int size) { } // error check - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxStreamError err = m_wxis->GetLastError(); if (err != wxSTREAM_NO_ERROR && err != wxSTREAM_EOF) { PyErr_SetString(PyExc_IOError,"IOError in wxInputStream"); @@ -1139,7 +1149,7 @@ PyObject* wxPyInputStream::read(int size) { // We use only strings for the streams, not unicode obj = PyString_FromStringAndSize(buf, buf.GetDataLen()); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return obj; } @@ -1152,9 +1162,9 @@ PyObject* wxPyInputStream::readline(int size) { // check if we have a real wxInputStream to work with if (!m_wxis) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_IOError,"no valid C-wxInputStream"); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } @@ -1165,7 +1175,7 @@ PyObject* wxPyInputStream::readline(int size) { } // errorcheck - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxStreamError err = m_wxis->GetLastError(); if (err != wxSTREAM_NO_ERROR && err != wxSTREAM_EOF) { PyErr_SetString(PyExc_IOError,"IOError in wxInputStream"); @@ -1174,7 +1184,7 @@ PyObject* wxPyInputStream::readline(int size) { // We use only strings for the streams, not unicode obj = PyString_FromStringAndSize((char*)buf.GetData(), buf.GetDataLen()); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return obj; } @@ -1184,19 +1194,21 @@ PyObject* wxPyInputStream::readlines(int sizehint) { // check if we have a real wxInputStream to work with if (!m_wxis) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_SetString(PyExc_IOError,"no valid C-wxInputStream"); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } // init list - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); pylist = PyList_New(0); + wxPyEndBlockThreads(blocked); + if (!pylist) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyErr_NoMemory(); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } @@ -1205,24 +1217,24 @@ PyObject* wxPyInputStream::readlines(int sizehint) { for (i=0; (m_wxis->CanRead()) && ((sizehint < 0) || (i < sizehint));) { PyObject* s = this->readline(); if (s == NULL) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(pylist); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyList_Append(pylist, s); i += PyString_Size(s); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } // error check wxStreamError err = m_wxis->GetLastError(); if (err != wxSTREAM_NO_ERROR && err != wxSTREAM_EOF) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(pylist); PyErr_SetString(PyExc_IOError,"IOError in wxInputStream"); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return NULL; } @@ -1250,16 +1262,18 @@ wxPyCBInputStream::wxPyCBInputStream(PyObject *r, PyObject *s, PyObject *t, bool wxPyCBInputStream::~wxPyCBInputStream() { - if (m_block) wxPyBeginBlockThreads(); + bool blocked; + if (m_block) blocked = wxPyBeginBlockThreads(); Py_XDECREF(m_read); Py_XDECREF(m_seek); Py_XDECREF(m_tell); - if (m_block) wxPyEndBlockThreads(); + if (m_block) wxPyEndBlockThreads(blocked); } wxPyCBInputStream* wxPyCBInputStream::create(PyObject *py, bool block) { - if (block) wxPyBeginBlockThreads(); + bool blocked; + if (block) blocked = wxPyBeginBlockThreads(); PyObject* read = getMethod(py, "read"); PyObject* seek = getMethod(py, "seek"); @@ -1270,11 +1284,11 @@ wxPyCBInputStream* wxPyCBInputStream::create(PyObject *py, bool block) { Py_XDECREF(read); Py_XDECREF(seek); Py_XDECREF(tell); - if (block) wxPyEndBlockThreads(); + if (block) wxPyEndBlockThreads(blocked); return NULL; } - if (block) wxPyEndBlockThreads(); + if (block) wxPyEndBlockThreads(blocked); return new wxPyCBInputStream(read, seek, tell, block); } @@ -1312,7 +1326,7 @@ size_t wxPyCBInputStream::OnSysRead(void *buffer, size_t bufsize) { if (bufsize == 0) return 0; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* arglist = Py_BuildValue("(i)", bufsize); PyObject* result = PyEval_CallObject(m_read, arglist); Py_DECREF(arglist); @@ -1330,7 +1344,7 @@ size_t wxPyCBInputStream::OnSysRead(void *buffer, size_t bufsize) { } else m_lasterror = wxSTREAM_READ_ERROR; - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return o; } @@ -1340,7 +1354,7 @@ size_t wxPyCBInputStream::OnSysWrite(const void *buffer, size_t bufsize) { } off_t wxPyCBInputStream::OnSysSeek(off_t off, wxSeekMode mode) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); #ifdef _LARGE_FILES // off_t is a 64-bit value... PyObject* arglist = Py_BuildValue("(Li)", off, mode); @@ -1350,13 +1364,13 @@ off_t wxPyCBInputStream::OnSysSeek(off_t off, wxSeekMode mode) { PyObject* result = PyEval_CallObject(m_seek, arglist); Py_DECREF(arglist); Py_XDECREF(result); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return OnSysTell(); } off_t wxPyCBInputStream::OnSysTell() const { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* arglist = Py_BuildValue("()"); PyObject* result = PyEval_CallObject(m_tell, arglist); Py_DECREF(arglist); @@ -1370,7 +1384,7 @@ off_t wxPyCBInputStream::OnSysTell() const { o = PyInt_AsLong(result); Py_DECREF(result); }; - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return o; } @@ -1389,12 +1403,14 @@ wxPyCallback::wxPyCallback(const wxPyCallback& other) { } wxPyCallback::~wxPyCallback() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(m_func); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } +#define wxPy_PRECALLINIT "_preCallInit" +#define wxPy_POSTCALLCLEANUP "_postCallCleanup" // This function is used for all events destined for Python event handlers. void wxPyCallback::EventThunker(wxEvent& event) { @@ -1405,7 +1421,7 @@ void wxPyCallback::EventThunker(wxEvent& event) { PyObject* tuple; bool checkSkip = False; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxString className = event.GetClassInfo()->GetClassName(); // If the event is one of these types then pass the original @@ -1425,9 +1441,17 @@ void wxPyCallback::EventThunker(wxEvent& event) { if (!arg) { PyErr_Print(); } else { + // "intern" the pre/post method names to speed up the HasAttr + static PyObject* s_preName = NULL; + static PyObject* s_postName = NULL; + if (s_preName == NULL) { + s_preName = PyString_FromString(wxPy_PRECALLINIT); + s_postName = PyString_FromString(wxPy_POSTCALLCLEANUP); + } + // Check if the event object needs some preinitialization - if (PyObject_HasAttrString(arg, "_preInit")) { - result = PyObject_CallMethod(arg, "_preInit", "O", arg); + if (PyObject_HasAttr(arg, s_preName)) { + result = PyObject_CallMethodObjArgs(arg, s_preName, arg, NULL); if ( result ) { Py_DECREF(result); // result is ignored, but we still need to decref it PyErr_Clear(); // Just in case... @@ -1447,6 +1471,17 @@ void wxPyCallback::EventThunker(wxEvent& event) { PyErr_Print(); } + // Check if the event object needs some post cleanup + if (PyObject_HasAttr(arg, s_postName)) { + result = PyObject_CallMethodObjArgs(arg, s_postName, arg, NULL); + if ( result ) { + Py_DECREF(result); // result is ignored, but we still need to decref it + PyErr_Clear(); // Just in case... + } else { + PyErr_Print(); + } + } + if ( checkSkip ) { // if the event object was one of our special types and // it had been cloned, then we need to extract the Skipped @@ -1461,7 +1496,7 @@ void wxPyCallback::EventThunker(wxEvent& event) { } Py_DECREF(tuple); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } @@ -1646,10 +1681,10 @@ PyObject* wxPyCBH_callCallbackObj(const wxPyCallbackHelper& cbh, PyObject* argTu void wxPyCBH_delete(wxPyCallbackHelper* cbh) { if (cbh->m_incRef) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_XDECREF(cbh->m_self); Py_XDECREF(cbh->m_class); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } } @@ -1667,14 +1702,14 @@ wxPyEvtSelfRef::wxPyEvtSelfRef() { } wxPyEvtSelfRef::~wxPyEvtSelfRef() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (m_cloned) Py_DECREF(m_self); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } void wxPyEvtSelfRef::SetSelf(PyObject* self, bool clone) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if (m_cloned) Py_DECREF(m_self); m_self = self; @@ -1682,7 +1717,7 @@ void wxPyEvtSelfRef::SetSelf(PyObject* self, bool clone) { Py_INCREF(m_self); m_cloned = True; } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); } PyObject* wxPyEvtSelfRef::GetSelf() const { @@ -1741,7 +1776,7 @@ PyObject* wxPy_ConvertList(wxListBase* listbase) { wxObject* wxObj; wxNode* node = list->GetFirst(); - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); pyList = PyList_New(0); while (node) { wxObj = node->GetData(); @@ -1749,7 +1784,7 @@ PyObject* wxPy_ConvertList(wxListBase* listbase) { PyList_Append(pyList, pyObj); node = node->GetNext(); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return pyList; } diff --git a/wxPython/src/html.i b/wxPython/src/html.i index 6220731d1f..b3c3a0c6ed 100644 --- a/wxPython/src/html.i +++ b/wxPython/src/html.i @@ -312,21 +312,21 @@ public: } void OnExit() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); Py_DECREF(m_tagHandlerClass); m_tagHandlerClass = NULL; for (size_t x=0; x < m_objArray.GetCount(); x++) { PyObject* obj = (PyObject*)m_objArray.Item(x); Py_DECREF(obj); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); }; void FillHandlersTable(wxHtmlWinParser *parser) { // Wave our magic wand... (if it works it's a miracle! ;-) // First, make a new instance of the tag handler - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* arg = PyTuple_New(0); PyObject* obj = PyObject_CallObject(m_tagHandlerClass, arg); Py_DECREF(arg); @@ -334,10 +334,10 @@ public: // now figure out where it's C++ object is... wxPyHtmlWinTagHandler* thPtr; if (! wxPyConvertSwigPtr(obj, (void **)&thPtr, wxT("wxPyHtmlWinTagHandler"))) { - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return; } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); // add it, parser->AddTagHandler(thPtr); @@ -625,13 +625,13 @@ public: virtual bool CanRead(const wxFSFile& file) const { bool rval = False; bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "CanRead"))) { PyObject* obj = wxPyMake_wxObject((wxFSFile*)&file); // cast away const rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); Py_DECREF(obj); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } @@ -641,7 +641,7 @@ public: virtual wxString ReadFile(const wxFSFile& file) const { wxString rval; bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "ReadFile"))) { PyObject* obj = wxPyMake_wxObject((wxFSFile*)&file); // cast away const PyObject* ro; @@ -652,7 +652,7 @@ public: Py_DECREF(ro); } } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } @@ -724,13 +724,13 @@ IMP_PYCALLBACK__CELLINTINTME(wxPyHtmlWindow, wxHtmlWindow, OnCellClicked); void wxPyHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) { bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnLinkClicked"))) { PyObject* obj = wxPyConstructObject((void*)&link, wxT("wxHtmlLinkInfo"), 0); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); Py_DECREF(obj); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxHtmlWindow::OnLinkClicked(link); } @@ -744,7 +744,7 @@ wxHtmlOpeningStatus wxPyHtmlWindow::OnOpeningURL(wxHtmlURLType type, wxString *redirect) const { bool found; wxHtmlOpeningStatus rval; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnOpeningURL"))) { PyObject* ro; PyObject* s = wx2PyString(url); @@ -765,7 +765,7 @@ wxHtmlOpeningStatus wxPyHtmlWindow::OnOpeningURL(wxHtmlURLType type, } Py_DECREF(ro); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) rval = wxHtmlWindow::OnOpeningURL(type, url, redirect); return rval; diff --git a/wxPython/src/my_typemaps.i b/wxPython/src/my_typemaps.i index c1a37dfc22..b130f580be 100644 --- a/wxPython/src/my_typemaps.i +++ b/wxPython/src/my_typemaps.i @@ -268,7 +268,9 @@ //--------------------------------------------------------------------------- -%typemap(out) bool "$result = PyBool_FromLong((bool)$1);" +%typemap(out) bool { + $result = $1 ? Py_True : Py_False; Py_INCREF($result); +} //---------------------------------------------------------------------------