RNA: include base types in RNA_struct_type_find_property search
Add RNA_struct_type_find_property_no_base for use in the rare situations when this isn't desired. Resolves T90617, where sequence strip sub-types weren't detecting properties that exist in the base "Sequence" types.
This commit is contained in:
parent
806bf3f452
commit
04ef718226
Notes:
blender-bot
2023-02-14 11:21:43 +01:00
Referenced by issue #90617, VSE: Inconsistent Alt+Hide/Unhide behaviour
|
@ -828,6 +828,7 @@ unsigned int RNA_struct_count_properties(StructRNA *srna);
|
|||
|
||||
/* lower level functions for access to type properties */
|
||||
const struct ListBase *RNA_struct_type_properties(StructRNA *srna);
|
||||
PropertyRNA *RNA_struct_type_find_property_no_base(StructRNA *srna, const char *identifier);
|
||||
PropertyRNA *RNA_struct_type_find_property(StructRNA *srna, const char *identifier);
|
||||
|
||||
FunctionRNA *RNA_struct_find_function(StructRNA *srna, const char *identifier);
|
||||
|
|
|
@ -967,11 +967,26 @@ const struct ListBase *RNA_struct_type_properties(StructRNA *srna)
|
|||
return &srna->cont.properties;
|
||||
}
|
||||
|
||||
PropertyRNA *RNA_struct_type_find_property(StructRNA *srna, const char *identifier)
|
||||
PropertyRNA *RNA_struct_type_find_property_no_base(StructRNA *srna, const char *identifier)
|
||||
{
|
||||
return BLI_findstring_ptr(&srna->cont.properties, identifier, offsetof(PropertyRNA, identifier));
|
||||
}
|
||||
|
||||
/**
|
||||
* \note #RNA_struct_find_property is a higher level alternative to this function
|
||||
* which takes a #PointerRNA instead of a #StructRNA.
|
||||
*/
|
||||
PropertyRNA *RNA_struct_type_find_property(StructRNA *srna, const char *identifier)
|
||||
{
|
||||
for (; srna; srna = srna->base) {
|
||||
PropertyRNA *prop = RNA_struct_type_find_property_no_base(srna, identifier);
|
||||
if (prop != NULL) {
|
||||
return prop;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
FunctionRNA *RNA_struct_find_function(StructRNA *srna, const char *identifier)
|
||||
{
|
||||
#if 1
|
||||
|
|
|
@ -4475,7 +4475,7 @@ static PyObject *pyrna_struct_meta_idprop_getattro(PyObject *cls, PyObject *attr
|
|||
if ((ret == NULL) /* || BPy_PropDeferred_CheckTypeExact(ret) */ ) {
|
||||
StructRNA *srna = srna_from_self(cls, "StructRNA.__getattr__");
|
||||
if (srna) {
|
||||
PropertyRNA *prop = RNA_struct_type_find_property(srna, PyUnicode_AsUTF8(attr));
|
||||
PropertyRNA *prop = RNA_struct_type_find_property_no_base(srna, PyUnicode_AsUTF8(attr));
|
||||
if (prop) {
|
||||
PointerRNA tptr;
|
||||
PyErr_Clear(); /* Clear error from tp_getattro. */
|
||||
|
@ -4497,7 +4497,7 @@ static int pyrna_struct_meta_idprop_setattro(PyObject *cls, PyObject *attr, PyOb
|
|||
const char *attr_str = PyUnicode_AsUTF8(attr);
|
||||
|
||||
if (srna && !pyrna_write_check() &&
|
||||
(is_deferred_prop || RNA_struct_type_find_property(srna, attr_str))) {
|
||||
(is_deferred_prop || RNA_struct_type_find_property_no_base(srna, attr_str))) {
|
||||
PyErr_Format(PyExc_AttributeError,
|
||||
"pyrna_struct_meta_idprop_setattro() "
|
||||
"can't set in readonly state '%.200s.%S'",
|
||||
|
|
Loading…
Reference in New Issue