fix for resolving rna paths, RNA_path_resolve could return a property which was the parent of the pointer (when it would normally be assumed to be the child).

also change pythons struct_rna.path_resolve to return StructRNA's or Properties when the property isnt NULL.
This commit is contained in:
Campbell Barton 2010-08-30 09:18:21 +00:00
parent e5b1e646e6
commit 92f6dd73b3
2 changed files with 14 additions and 5 deletions

@ -2993,8 +2993,10 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
case PROP_POINTER:
nextptr= RNA_property_pointer_get(&curptr, prop);
if(nextptr.data)
if(nextptr.data) {
curptr= nextptr;
prop= NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
}
else
return 0;
@ -3033,8 +3035,10 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
}
}
if(nextptr.data)
if(nextptr.data) {
curptr= nextptr;
prop= NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
}
else
return 0;
}

@ -2306,11 +2306,16 @@ static PyObject *pyrna_struct_path_resolve(BPy_StructRNA *self, PyObject *args)
return NULL;
if (RNA_path_resolve(&self->ptr, path, &r_ptr, &r_prop)) {
if(coerce == Py_False) {
return pyrna_prop_CreatePyObject(&r_ptr, r_prop);
if(r_prop) {
if(coerce == Py_False) {
return pyrna_prop_CreatePyObject(&r_ptr, r_prop);
}
else {
return pyrna_prop_to_py(&r_ptr, r_prop);
}
}
else {
return pyrna_prop_to_py(&r_ptr, r_prop);
return pyrna_struct_CreatePyObject(&r_ptr);
}
}
else {