-#define PYCALLBACK_STRING_INTINT(PCLASS, CBNAME) \
- wxString CBNAME(int a, int b) { \
- bool doSave = wxPyRestoreThread(); \
- wxString rval; \
- if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \
- PyObject* ro; \
- ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(ii)",a,b)); \
- if (ro) { \
- PyObject* str = PyObject_Str(ro); \
- rval = PyString_AsString(str); \
- Py_DECREF(ro); Py_DECREF(str); \
- } \
- } else \
- rval = PCLASS::CBNAME(a, b); \
- wxPySaveThread(doSave); \
- return rval; \
- } \
- wxString base_##CBNAME(int a, int b) { \
- return PCLASS::CBNAME(a, b); \
+#define PYCALLBACK_STRING_INTINT(PCLASS, CBNAME) \
+ wxString CBNAME(int a, int b) { \
+ bool found; \
+ wxPyBeginBlockThreads(); \
+ wxString rval; \
+ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \
+ PyObject* ro; \
+ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(ii)",a,b)); \
+ if (ro) { \
+ rval = Py2wxString(ro); \
+ Py_DECREF(ro); \
+ } \
+ } \
+ wxPyEndBlockThreads(); \
+ if (! found) \
+ rval = PCLASS::CBNAME(a, b); \
+ return rval; \
+ } \
+ wxString base_##CBNAME(int a, int b) { \
+ return PCLASS::CBNAME(a, b); \