diff --git a/source/blender/makesrna/intern/rna_access.cc b/source/blender/makesrna/intern/rna_access.cc index acb35ba4148..42023256d57 100644 --- a/source/blender/makesrna/intern/rna_access.cc +++ b/source/blender/makesrna/intern/rna_access.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -2099,12 +2100,13 @@ int RNA_property_ui_icon(const PropertyRNA *prop) static bool rna_property_editable_do(const PointerRNA *ptr, PropertyRNA *prop_orig, + std::optional prop_ensured, const int index, const char **r_info) { ID *id = ptr->owner_id; - PropertyRNA *prop = rna_ensure_property(prop_orig); + PropertyRNA *prop = prop_ensured ? *prop_ensured : rna_ensure_property(prop_orig); const char *info = ""; const int flag = (prop->itemeditable != nullptr && index >= 0) ? @@ -2165,12 +2167,12 @@ static bool rna_property_editable_do(const PointerRNA *ptr, bool RNA_property_editable(const PointerRNA *ptr, PropertyRNA *prop) { - return rna_property_editable_do(ptr, prop, -1, nullptr); + return rna_property_editable_do(ptr, prop, std::nullopt, -1, nullptr); } bool RNA_property_editable_info(const PointerRNA *ptr, PropertyRNA *prop, const char **r_info) { - return rna_property_editable_do(ptr, prop, -1, r_info); + return rna_property_editable_do(ptr, prop, std::nullopt, -1, r_info); } bool RNA_property_editable_flag(const PointerRNA *ptr, PropertyRNA *prop) @@ -2187,10 +2189,10 @@ bool RNA_property_editable_index(const PointerRNA *ptr, PropertyRNA *prop, const { BLI_assert(index >= 0); - return rna_property_editable_do(ptr, prop, index, nullptr); + return rna_property_editable_do(ptr, prop, std::nullopt, index, nullptr); } -bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop) +bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop_orig) { /* check that base ID-block can support animation data */ if (!id_can_have_animdata(ptr->owner_id)) { @@ -2207,13 +2209,13 @@ bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop) } } - prop = rna_ensure_property(prop); + PropertyRNA *prop_ensured = rna_ensure_property(prop_orig); - if (!(prop->flag & PROP_ANIMATABLE)) { + if (!(prop_ensured->flag & PROP_ANIMATABLE)) { return false; } - return RNA_property_editable(const_cast(ptr), prop); + return rna_property_editable_do(ptr, prop_orig, prop_ensured, -1, nullptr); } bool RNA_property_drivable(const PointerRNA *ptr, PropertyRNA *prop)