Changes needed to solve wxPython's OOR problem for the wxOGL shapes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12717 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2001-11-27 02:56:59 +00:00
parent 220f2d5c4d
commit 2f4e928794
33 changed files with 504 additions and 97 deletions

View File

@@ -287,14 +287,16 @@ PyObject* wxPyClassExists(const char* className) {
}
PyObject* wxPyMake_wxObject(wxObject* source) {
PyObject* wxPyMake_wxObject(wxObject* source, bool checkEvtHandler) {
PyObject* target = NULL;
bool isEvtHandler = FALSE;
if (source) {
// If it's derived from wxEvtHandler then there may
// already be a pointer to a Python objec that we can use.
if (wxIsKindOf(source, wxEvtHandler)) {
// already be a pointer to a Python object that we can use
// in the OOR data.
if (checkEvtHandler && wxIsKindOf(source, wxEvtHandler)) {
isEvtHandler = TRUE;
wxEvtHandler* eh = (wxEvtHandler*)source;
wxPyClientData* data = (wxPyClientData*)eh->GetClientObject();
if (data) {
@@ -302,15 +304,6 @@ PyObject* wxPyMake_wxObject(wxObject* source) {
Py_INCREF(target);
}
}
else if (wxIsKindOf(source, wxSizer)) {
// wxSizers also track the original object
wxSizer* sz = (wxSizer*)source;
wxPyClientData* data = (wxPyClientData*)sz->GetClientObject();
if (data) {
target = data->m_obj;
Py_INCREF(target);
}
}
if (! target) {
// Otherwise make it the old fashioned way by making a
@@ -341,6 +334,30 @@ PyObject* wxPyMake_wxObject(wxObject* source) {
}
PyObject* wxPyMake_wxSizer(wxSizer* source) {
PyObject* target = NULL;
if (source && wxIsKindOf(source, wxSizer)) {
// If it's derived from wxSizer then there may
// already be a pointer to a Python object that we can use
// in the OOR data.
wxSizer* sz = (wxSizer*)source;
wxPyClientData* data = (wxPyClientData*)sz->GetClientObject();
if (data) {
target = data->m_obj;
Py_INCREF(target);
}
}
if (! target) {
target = wxPyMake_wxObject(source, FALSE);
if (target != Py_None)
((wxSizer*)source)->SetClientObject(new wxPyClientData(target));
}
return target;
}
//---------------------------------------------------------------------------
PyObject* wxPyConstructObject(void* ptr,