]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/helpers.cpp
fixes to mask creation by colour
[wxWidgets.git] / wxPython / src / helpers.cpp
index c9994a4cfb4faaa337a29a9b314ec8901805e227..2783d56dc824db00ea046789547a28c0b158b694 100644 (file)
@@ -290,24 +290,38 @@ PyObject* wxPyClassExists(const char* className) {
 
 
 PyObject*  wxPyMake_wxObject(wxObject* source) {
-    PyObject* target;
+    PyObject* target = NULL;
+    bool      isEvtHandler = FALSE;
 
     if (source) {
-        wxClassInfo* info = source->GetClassInfo();
-        wxChar*      name = (wxChar*)info->GetClassName();
-        PyObject*    klass = wxPyClassExists(name);
-        while (info && !klass) {
-            name = (wxChar*)info->GetBaseClassName1();
-            info = wxClassInfo::FindClass(name);
-            klass = wxPyClassExists(name);
+        if (wxIsKindOf(source, wxEvtHandler)) {
+            wxEvtHandler* eh = (wxEvtHandler*)source;
+            wxPyClientData* data = (wxPyClientData*)eh->GetClientObject();
+            if (data) {
+                target = data->m_obj;
+                Py_INCREF(target);
+            }
         }
-        if (info) {
-            target = wxPyConstructObject(source, name, klass, FALSE);
-        } else {
-            wxString msg("wxPython class not found for ");
-            msg += source->GetClassInfo()->GetClassName();
-            PyErr_SetString(PyExc_NameError, msg.c_str());
-            target = NULL;
+
+        if (! target) {
+            wxClassInfo* info = source->GetClassInfo();
+            wxChar*      name = (wxChar*)info->GetClassName();
+            PyObject*    klass = wxPyClassExists(name);
+            while (info && !klass) {
+                name = (wxChar*)info->GetBaseClassName1();
+                info = wxClassInfo::FindClass(name);
+                klass = wxPyClassExists(name);
+            }
+            if (info) {
+                target = wxPyConstructObject(source, name, klass, FALSE);
+                if (target && isEvtHandler)
+                    ((wxEvtHandler*)source)->SetClientObject(new wxPyClientData(target));
+            } else {
+                wxString msg("wxPython class not found for ");
+                msg += source->GetClassInfo()->GetClassName();
+                PyErr_SetString(PyExc_NameError, msg.c_str());
+                target = NULL;
+            }
         }
     } else {  // source was NULL so return None.
         Py_INCREF(Py_None); target = Py_None;
@@ -315,6 +329,7 @@ PyObject*  wxPyMake_wxObject(wxObject* source) {
     return target;
 }
 
+
 //---------------------------------------------------------------------------
 
 PyObject* wxPyConstructObject(void* ptr,
@@ -576,7 +591,7 @@ PyObject* wxPyCallbackHelper::callCallbackObj(PyObject* argTuple) const {
 }
 
 
-void wxPyCBH_setSelf(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref) {
+void wxPyCBH_setCallbackInfo(wxPyCallbackHelper& cbh, PyObject* self, PyObject* klass, int incref) {
     cbh.setSelf(self, klass, incref);
 }
 
@@ -1011,11 +1026,24 @@ wxString* wxString_LIST_helper(PyObject* source) {
     }
     for (int x=0; x<count; x++) {
         PyObject* o = PyList_GetItem(source, x);
+#if PYTHON_API_VERSION >= 1009
+        if (! PyString_Check(o) && ! PyUnicode_Check(o)) {
+            PyErr_SetString(PyExc_TypeError, "Expected a list of string or unicode objects.");
+            return NULL;
+        }
+
+        char* buff;
+        int   length;
+        if (PyString_AsStringAndSize(o, &buff, &length) == -1)
+            return NULL;
+        temp[x] = wxString(buff, length);
+#else
         if (! PyString_Check(o)) {
             PyErr_SetString(PyExc_TypeError, "Expected a list of strings.");
             return NULL;
         }
         temp[x] = PyString_AsString(o);
+#endif
     }
     return temp;
 }