diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-04-08 22:45:41 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-04-08 22:45:41 +0400 |
commit | 25d0720dc471926f63a628dc1d24d851c550ceaa (patch) | |
tree | 4d7ba9a2a13d6514f8c8e7a41c8605a3813cab50 /source/blender/python/intern/bpy_util.c | |
parent | d979085614629c05f87715f1cc78bb2640498a21 (diff) |
2.5:
* Fix to make python panels callbacks get the actual
blender Panel as an argument, instead of any instance.
* Fix for callback validation in python 2.5, worked OK
in python 3.0 but gave error in 2.5 because it's a
method instead of a function there.
Diffstat (limited to 'source/blender/python/intern/bpy_util.c')
-rw-r--r-- | source/blender/python/intern/bpy_util.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c index 347b914a030..0623124009c 100644 --- a/source/blender/python/intern/bpy_util.c +++ b/source/blender/python/intern/bpy_util.c @@ -244,7 +244,7 @@ PyObject *PyObject_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...) int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs) { - PyObject *item; + PyObject *item, *fitem; PyObject *py_arg_count; int i, arg_count; @@ -292,12 +292,17 @@ int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_c } break; case 'f': - if (PyFunction_Check(item)==0) { + if (PyMethod_Check(item)) + fitem= PyMethod_Function(item); /* py 2.x */ + else + fitem= item; /* py 3.x */ + + if (PyFunction_Check(fitem)==0) { PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a function", class_type, class_attrs->name); return -1; } if (class_attrs->arg_count >= 0) { /* -1 if we dont care*/ - py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(item), "co_argcount"); + py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(fitem), "co_argcount"); arg_count = PyLong_AsSsize_t(py_arg_count); Py_DECREF(py_arg_count); |