Revision: 49173
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49173
Author: lukastoenne
Date: 2012-07-24 12:00:02 +0000 (Tue, 24 Jul 2012)
Log Message:
-----------
Fix for RNA struct registration: the bpy_class_validate function would only
check the immediate functions/properties of the pointer struct type, but not
potential base structs. Now it first validates the base struct recursively
before the actual properties of the registered class.
Does not have any effect for current registerable types (Operator, Menu, Panel,
etc.), since none of those actually have a base struct, but will be required
for future types with an actual hierarchy (custom nodes).
Modified Paths:
--------------
trunk/blender/source/blender/python/intern/bpy_rna.c
Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c 2012-07-24
11:49:21 UTC (rev 49172)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c 2012-07-24
12:00:02 UTC (rev 49173)
@@ -6736,20 +6736,24 @@
return count;
}
-static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int
*have_function)
+static int bpy_class_validate_recursive(PointerRNA *dummyptr, StructRNA *srna,
void *py_data, int *have_function)
{
const ListBase *lb;
Link *link;
FunctionRNA *func;
PropertyRNA *prop;
- StructRNA *srna = dummyptr->type;
const char *class_type = RNA_struct_identifier(srna);
+ StructRNA *srna_base = RNA_struct_base(srna);
PyObject *py_class = (PyObject *)py_data;
PyObject *base_class = RNA_struct_py_type_get(srna);
PyObject *item;
int i, flag, arg_count, func_arg_count;
const char *py_class_name = ((PyTypeObject *)py_class)->tp_name; //
__name__
+ if (srna_base) {
+ if (bpy_class_validate_recursive(dummyptr, srna_base, py_data,
have_function) != 0)
+ return -1;
+ }
if (base_class) {
if (!PyObject_IsSubclass(py_class, base_class)) {
@@ -6884,6 +6888,11 @@
return 0;
}
+static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int
*have_function)
+{
+ return bpy_class_validate_recursive(dummyptr, dummyptr->type, py_data,
have_function);
+}
+
/* TODO - multiple return values like with rna functions */
static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func,
ParameterList *parms)
{
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs