[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19606] branches/blender2.5/blender/source /blender: 2.5:
Brecht Van Lommel
brecht at blender.org
Wed Apr 8 20:45:41 CEST 2009
Revision: 19606
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19606
Author: blendix
Date: 2009-04-08 20:45:41 +0200 (Wed, 08 Apr 2009)
Log Message:
-----------
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.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
branches/blender2.5/blender/source/blender/python/intern/bpy_panel_wrap.c
branches/blender2.5/blender/source/blender/python/intern/bpy_util.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-04-08 17:40:09 UTC (rev 19605)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-04-08 18:45:41 UTC (rev 19606)
@@ -44,6 +44,7 @@
struct wmWindowManager;
struct uiLayout;
struct uiMenuItem;
+struct StructRNA;
/* spacetype has everything stored to get an editor working, it gets initialized via
ED_spacetypes_init() in editors/area/spacetypes.c */
@@ -152,7 +153,8 @@
void (*draw)(const struct bContext *, struct Panel *);
/* python integration */
- void *py_data;
+ void *py_data;
+ struct StructRNA *srna;
} PanelType;
/* header types */
Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_panel_wrap.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_panel_wrap.c 2009-04-08 17:40:09 UTC (rev 19605)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_panel_wrap.c 2009-04-08 18:45:41 UTC (rev 19606)
@@ -47,15 +47,17 @@
static int PyPanel_generic(int mode, const bContext *C, Panel *pnl)
{
PyObject *py_class= (PyObject *)(pnl->type->py_data);
- //uiLayout *layout= pnl->layout;
PyObject *args;
PyObject *ret= NULL, *py_class_instance, *item;
+ PointerRNA panelptr;
int ret_flag= 0;
PyGILState_STATE gilstate = PyGILState_Ensure();
- args = PyTuple_New(0);
+ args = PyTuple_New(1);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->srna, pnl, &panelptr);
+ PyTuple_SET_ITEM(args, 0, pyrna_struct_CreatePyObject(&panelptr));
py_class_instance = PyObject_Call(py_class, args, NULL);
Py_DECREF(args);
@@ -211,6 +213,10 @@
pt->py_data= (void *)py_class;
BLI_addtail(&art->paneltypes, pt);
+
+ pt->srna= RNA_def_struct(&BLENDER_RNA, pt->idname, "Panel");
+ RNA_struct_py_type_set(pt->srna, py_class);
+
Py_RETURN_NONE;
}
Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_util.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_util.c 2009-04-08 17:40:09 UTC (rev 19605)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_util.c 2009-04-08 18:45:41 UTC (rev 19606)
@@ -244,7 +244,7 @@
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 @@
}
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);
More information about the Bf-blender-cvs
mailing list