diff --git a/source/blender/makesrna/RNA_define.hh b/source/blender/makesrna/RNA_define.hh index ffa98d18b35..8720108cba0 100644 --- a/source/blender/makesrna/RNA_define.hh +++ b/source/blender/makesrna/RNA_define.hh @@ -446,6 +446,15 @@ void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag); void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag); void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag); void RNA_def_property_override_clear_flag(PropertyRNA *prop, PropertyOverrideFlag flag); + +/** + * In some cases showing properties in the outliner crashes. + * It's a bug that occurs when accessing a value re-allocates + * memory which may already be referenced by other RNA. + * See: #145877. + */ +void RNA_def_property_flag_hide_from_ui_workaround(PropertyRNA *prop); + /** * Add the property-tags passed as \a tags to \a prop (if valid). * diff --git a/source/blender/makesrna/intern/rna_define.cc b/source/blender/makesrna/intern/rna_define.cc index c61400211ea..19b037d3555 100644 --- a/source/blender/makesrna/intern/rna_define.cc +++ b/source/blender/makesrna/intern/rna_define.cc @@ -1594,6 +1594,13 @@ void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag) } } +void RNA_def_property_flag_hide_from_ui_workaround(PropertyRNA *prop) +{ + /* Re-use the hidden flag. + * This function is mainly used so it's clear that this is a workaround. */ + RNA_def_property_flag(prop, PROP_HIDDEN); +} + void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag) { prop->flag &= ~flag; diff --git a/source/blender/makesrna/intern/rna_depsgraph.cc b/source/blender/makesrna/intern/rna_depsgraph.cc index e2237f9e653..c5edab325cd 100644 --- a/source/blender/makesrna/intern/rna_depsgraph.cc +++ b/source/blender/makesrna/intern/rna_depsgraph.cc @@ -800,6 +800,7 @@ static void rna_def_depsgraph(BlenderRNA *brna) prop = RNA_def_property(srna, "ids", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "ID"); + RNA_def_property_flag_hide_from_ui_workaround(prop); RNA_def_property_collection_funcs(prop, "rna_Depsgraph_ids_begin", "rna_Depsgraph_ids_next", @@ -813,6 +814,7 @@ static void rna_def_depsgraph(BlenderRNA *brna) prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "Object"); + RNA_def_property_flag_hide_from_ui_workaround(prop); RNA_def_property_collection_funcs(prop, "rna_Depsgraph_objects_begin", "rna_Depsgraph_objects_next", @@ -826,6 +828,7 @@ static void rna_def_depsgraph(BlenderRNA *brna) prop = RNA_def_property(srna, "object_instances", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "DepsgraphObjectInstance"); + RNA_def_property_flag_hide_from_ui_workaround(prop); RNA_def_property_collection_funcs(prop, "rna_Depsgraph_object_instances_begin", "rna_Depsgraph_object_instances_next", @@ -843,6 +846,7 @@ static void rna_def_depsgraph(BlenderRNA *brna) prop = RNA_def_property(srna, "updates", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "DepsgraphUpdate"); + RNA_def_property_flag_hide_from_ui_workaround(prop); RNA_def_property_collection_funcs(prop, "rna_Depsgraph_updates_begin", "rna_Depsgraph_ids_next",