]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/helpers.cpp
Fixed error in translation ( thanks to Nerijus Baliunas for spotting it )
[wxWidgets.git] / wxPython / src / helpers.cpp
index 187a0673c8945f22c987040483d24f8d6b6568de..28f0621eedbacb91ccf8d38f9fd1f4c7edd819a5 100644 (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
     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) {
             wxEvtHandler* eh = (wxEvtHandler*)source;
             wxPyClientData* data = (wxPyClientData*)eh->GetClientObject();
             if (data) {
@@ -302,15 +304,6 @@ PyObject*  wxPyMake_wxObject(wxObject* source) {
                 Py_INCREF(target);
             }
         }
                 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
 
         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,
 //---------------------------------------------------------------------------
 
 PyObject* wxPyConstructObject(void* ptr,
@@ -1306,7 +1323,7 @@ PyObject* wxArrayString2PyList_helper(const wxArrayString& arr) {
     for (size_t i=0; i < arr.GetCount(); i++) {
         PyObject* str = PyString_FromString(arr[i].c_str());
         PyList_Append(list, str);
     for (size_t i=0; i < arr.GetCount(); i++) {
         PyObject* str = PyString_FromString(arr[i].c_str());
         PyList_Append(list, str);
-        // TODO:  Check refcount on str...
+        Py_DECREF(str);
     }
     return list;
 }
     }
     return list;
 }