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:
parent
e5b1e646e6
commit
92f6dd73b3
@ -2993,8 +2993,10 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
|
|||||||
case PROP_POINTER:
|
case PROP_POINTER:
|
||||||
nextptr= RNA_property_pointer_get(&curptr, prop);
|
nextptr= RNA_property_pointer_get(&curptr, prop);
|
||||||
|
|
||||||
if(nextptr.data)
|
if(nextptr.data) {
|
||||||
curptr= nextptr;
|
curptr= nextptr;
|
||||||
|
prop= NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
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;
|
curptr= nextptr;
|
||||||
|
prop= NULL; /* now we have a PointerRNA, the prop is our parent so forget it */
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2306,11 +2306,16 @@ static PyObject *pyrna_struct_path_resolve(BPy_StructRNA *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (RNA_path_resolve(&self->ptr, path, &r_ptr, &r_prop)) {
|
if (RNA_path_resolve(&self->ptr, path, &r_ptr, &r_prop)) {
|
||||||
if(coerce == Py_False) {
|
if(r_prop) {
|
||||||
return pyrna_prop_CreatePyObject(&r_ptr, 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 {
|
else {
|
||||||
return pyrna_prop_to_py(&r_ptr, r_prop);
|
return pyrna_struct_CreatePyObject(&r_ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user