X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/65dd82cbcef74ea4514a7cc1407695cf9b4dba98..e52cac90cda8f499169a247e7f23c985b16a70e6:/utils/wxPython/src/helpers.cpp diff --git a/utils/wxPython/src/helpers.cpp b/utils/wxPython/src/helpers.cpp index d73f04007d..87ec5fbe71 100644 --- a/utils/wxPython/src/helpers.cpp +++ b/utils/wxPython/src/helpers.cpp @@ -382,12 +382,14 @@ void wxPyCallback::EventThunker(wxEvent& event) { wxPyCallbackHelper::wxPyCallbackHelper() { m_self = NULL; m_lastFound = NULL; + m_incRef = FALSE; } wxPyCallbackHelper::~wxPyCallbackHelper() { bool doSave = wxPyRestoreThread(); - Py_XDECREF(m_self); + if (m_incRef) + Py_XDECREF(m_self); wxPySaveThread(doSave); } @@ -401,6 +403,7 @@ wxPyCallbackHelper::wxPyCallbackHelper(const wxPyCallbackHelper& other) { void wxPyCallbackHelper::setSelf(PyObject* self, int incref) { m_self = self; + m_incRef = incref; if (incref) Py_INCREF(m_self); } @@ -450,20 +453,20 @@ PyObject* wxPyCallbackHelper::callCallbackObj(PyObject* argTuple) { // themselves and some special case handling in wxPyCallback::EventThunker. -wxPySelfRef::wxPySelfRef() { +wxPyEvtSelfRef::wxPyEvtSelfRef() { //m_self = Py_None; // **** We don't do normal ref counting to prevent //Py_INCREF(m_self); // circular loops... m_cloned = false; } -wxPySelfRef::~wxPySelfRef() { +wxPyEvtSelfRef::~wxPyEvtSelfRef() { bool doSave = wxPyRestoreThread(); if (m_cloned) Py_DECREF(m_self); wxPySaveThread(doSave); } -void wxPySelfRef::SetSelf(PyObject* self, bool clone) { +void wxPyEvtSelfRef::SetSelf(PyObject* self, bool clone) { bool doSave = wxPyRestoreThread(); if (m_cloned) Py_DECREF(m_self); @@ -475,7 +478,7 @@ void wxPySelfRef::SetSelf(PyObject* self, bool clone) { wxPySaveThread(doSave); } -PyObject* wxPySelfRef::GetSelf() const { +PyObject* wxPyEvtSelfRef::GetSelf() const { Py_INCREF(m_self); return m_self; }