X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b0e5c039344bdd0e96c423ea59191986526b0efd..ba77f39094de162f80a09cc84f0c93373c2584f9:/wxPython/src/helpers.h diff --git a/wxPython/src/helpers.h b/wxPython/src/helpers.h index 7831008324..3ad0d236a7 100644 --- a/wxPython/src/helpers.h +++ b/wxPython/src/helpers.h @@ -223,14 +223,24 @@ void wxPyOORClientData_dtor(wxPyOORClientData* self); class wxPyCallbackHelper; + +// Make SunCC happy and make typedef's for these that are extern "C" +typedef void (*p_SWIG_MakePtr_t)(char*, void*, char*); +typedef char* (*p_SWIG_GetPtr_t)(char*, void**, char*); +typedef char* (*p_SWIG_GetPtrObj_t)(PyObject*, void**, char*); +typedef void (*p_SWIG_RegisterMapping_t)(char*, char*, void *(*cast)(void *)); +typedef void (*p_SWIG_addvarlink_t)(PyObject*, char*, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)); +typedef PyObject* (*p_SWIG_newvarlink_t)(void); + + struct wxPyCoreAPI { - void (*p_SWIG_MakePtr)(char*, void*, char*); - char* (*p_SWIG_GetPtr)(char*, void**, char*); - char* (*p_SWIG_GetPtrObj)(PyObject*, void**, char*); - void (*p_SWIG_RegisterMapping)(char*, char*, void *(*cast)(void *)); - void (*p_SWIG_addvarlink)(PyObject*, char*, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)); - PyObject* (*p_SWIG_newvarlink)(void); + p_SWIG_MakePtr_t p_SWIG_MakePtr; + p_SWIG_GetPtr_t p_SWIG_GetPtr; + p_SWIG_GetPtrObj_t p_SWIG_GetPtrObj; + p_SWIG_RegisterMapping_t p_SWIG_RegisterMapping; + p_SWIG_addvarlink_t p_SWIG_addvarlink; + p_SWIG_newvarlink_t p_SWIG_newvarlink; PyThreadState* (*p_wxPyBeginAllowThreads)(); void (*p_wxPyEndAllowThreads)(PyThreadState* state); @@ -950,10 +960,10 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK__BOOL2DBLINT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(bool a, double b, double c, int d) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iddi)", (int)a,b,c,d));\ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a, b, c, d); \ } \ @@ -971,10 +981,13 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK__STRING(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(const wxString& a) { \ bool found; \ - wxPyBeginBlockThreads(); \ - if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", wx2PyString(a))); \ - wxPyEndBlockThreads(); \ + wxPyBeginBlockThreads(); \ + if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ + PyObject* s = wx2PyString(a); \ + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); \ + Py_DECREF(s); \ + } \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(a); \ } \ @@ -992,10 +1005,13 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool CLASS::CBNAME(const wxString& a) { \ bool rval=FALSE; \ bool found; \ - wxPyBeginBlockThreads(); \ - if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ - rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", wx2PyString(a)));\ - wxPyEndBlockThreads(); \ + 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(); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -1009,15 +1025,18 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define DEC_PYCALLBACK_BOOL_STRING_pure(CBNAME) \ bool CBNAME(const wxString& a); -#define IMP_PYCALLBACK_BOOL_STRING_pure(CLASS, PCLASS, CBNAME) \ - bool CLASS::CBNAME(const wxString& a) { \ - bool rval=FALSE; \ - wxPyBeginBlockThreads(); \ - if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ - rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", wx2PyString(a))); \ - wxPyEndBlockThreads(); \ - return rval; \ - } \ +#define IMP_PYCALLBACK_BOOL_STRING_pure(CLASS, PCLASS, CBNAME) \ + bool CLASS::CBNAME(const wxString& a) { \ + bool rval=FALSE; \ + wxPyBeginBlockThreads(); \ + if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ + PyObject* s = wx2PyString(a); \ + rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", s)); \ + Py_DECREF(s); \ + } \ + wxPyEndBlockThreads(); \ + return rval; \ + } \ //--------------------------------------------------------------------------- @@ -1030,7 +1049,9 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ - ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)", wx2PyString(a)));\ + PyObject* s = wx2PyString(a); \ + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)", s)); \ + Py_DECREF(s); \ if (ro) { \ rval = Py2wxString(ro); \ Py_DECREF(ro); \ @@ -1048,10 +1069,12 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK_STRING_STRINGINT_pure(CLASS, PCLASS, CBNAME) \ wxString CLASS::CBNAME(const wxString& a,int b) { \ wxString rval; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ - ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(Oi)", wx2PyString(a),b)); \ + PyObject* s = wx2PyString(a); \ + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(Oi)",s,b)); \ + Py_DECREF(s); \ if (ro) { \ rval = Py2wxString(ro); \ Py_DECREF(ro); \ @@ -1071,10 +1094,14 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool CLASS::CBNAME(const wxString& a, const wxString& b) { \ bool rval=FALSE; \ bool found; \ - wxPyBeginBlockThreads(); \ - if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) \ - rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)", \ - wx2PyString(a), wx2PyString(b))); \ + wxPyBeginBlockThreads(); \ + if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ + PyObject* s1 = wx2PyString(a); \ + PyObject* s2 = wx2PyString(b); \ + rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)",s1,s2)); \ + Py_DECREF(s1); \ + Py_DECREF(s2); \ + } \ wxPyEndBlockThreads(); \ if (! found) \ rval = PCLASS::CBNAME(a, b); \ @@ -1142,13 +1169,13 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK_BOOL_TAG_pure(CLASS, PCLASS, CBNAME) \ bool CLASS::CBNAME(const wxHtmlTag& a) { \ bool rval=FALSE; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* obj = wxPyConstructObject((void*)&a, "wxHtmlTag", 0); \ rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ return rval; \ } @@ -1161,13 +1188,13 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK__CELLINTINT(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)cell, "wxHtmlCell", 0); \ wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(Oii)",obj,x,y)); \ Py_DECREF(obj); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ PCLASS::CBNAME(cell, x, y); \ } \ @@ -1185,7 +1212,7 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK__CELLINTINTME(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e) { \ bool found; \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) { \ PyObject* obj = wxPyConstructObject((void*)cell, "wxHtmlCell", 0); \ PyObject* o2 = wxPyConstructObject((void*)&e, "wxMouseEvent", 0); \ @@ -1193,12 +1220,12 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); Py_DECREF(obj); \ Py_DECREF(o2); \ } \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ if (! found) \ - PCLASS::CBNAME(cell, x, y, e); \ + PCLASS::CBNAME(cell, x, y, e); \ } \ void CLASS::base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e) { \ - PCLASS::CBNAME(cell, x, y, e); \ + PCLASS::CBNAME(cell, x, y, e); \ } @@ -1211,10 +1238,10 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); #define IMP_PYCALLBACK___pure(CLASS, PCLASS, CBNAME) \ void CLASS::CBNAME() { \ - wxPyBeginBlockThreads(); \ + wxPyBeginBlockThreads(); \ if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ wxPyCBH_callCallback(m_myInst, Py_BuildValue("()")); \ - wxPyEndBlockThreads(); \ + wxPyEndBlockThreads(); \ } //--------------------------------------------------------------------------- @@ -1266,13 +1293,13 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool CLASS::CBNAME(wxWindow* a) { \ bool rval=FALSE; \ bool found; \ - wxPyBeginBlockThreads(); \ + 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(); \ if (! found) \ rval = PCLASS::CBNAME(a); \ return rval; \ @@ -1362,13 +1389,15 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); if (wxPyCBH_findCallback(m_myInst, #CBNAME)) { \ PyObject* ro; \ PyObject* obj = wxPyMake_wxObject(&a); \ + PyObject* s = wx2PyString(b); \ ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(OO)",\ - obj, wx2PyString(b))); \ + obj, s)); \ if (ro) { \ SWIG_GetPtrObj(ro, (void **)&rval, "_wxFSFILE_p"); \ Py_DECREF(ro); \ } \ Py_DECREF(obj); \ + Py_DECREF(s); \ } \ wxPyEndBlockThreads(); \ return rval; \ @@ -1422,8 +1451,11 @@ void wxPyCBH_delete(wxPyCallbackHelper* cbh); bool CLASS::CBNAME(int a, int b, const wxString& c) { \ bool rval=FALSE; \ wxPyBeginBlockThreads(); \ - if (wxPyCBH_findCallback(m_myInst, #CBNAME)) \ - rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",a,b, wx2PyString(c)));\ + 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(); \ return rval; \ } \