diff options
author | Bastien Montagne <bastien@blender.org> | 2020-06-26 19:08:12 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-06-29 18:28:04 +0300 |
commit | 28f4e5cd6bc718d91d0f637c89bce4ce68671b71 (patch) | |
tree | d66ba3d00fcdbd700de13909cb22ac9f6983709f /source | |
parent | febb2351ad35c26e0102f2db655694151eab382d (diff) |
RNA: Add a way to prevent automatic addition of 'no ownership' flag for ID pointer properties.
Since makesrna runs after all properties have been defined, we have to
remember with a new internal flag when we explicitely disable the
'PROP_PTR_NO_OWNERSHIP' flag for a property.
Otherwise there was no way to do so for ID pointer properties...
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_define.c | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_internal_types.h | 3 |
3 files changed, 10 insertions, 2 deletions
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 6256fd47ade..59087df16dd 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -3770,7 +3770,8 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr /* XXX This systematically enforces that flag on ID pointers... * we'll probably have to revisit. :/ */ StructRNA *type = rna_find_struct((const char *)pprop->type); - if (type && (type->flag & STRUCT_ID)) { + if (type && (type->flag & STRUCT_ID) && + !(prop->flag_internal & PROP_INTERN_PTR_OWNERSHIP_FORCED)) { prop->flag |= PROP_PTR_NO_OWNERSHIP; } break; @@ -3781,7 +3782,8 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr /* XXX This systematically enforces that flag on ID pointers... * we'll probably have to revisit. :/ */ StructRNA *type = rna_find_struct((const char *)cprop->item_type); - if (type && (type->flag & STRUCT_ID)) { + if (type && (type->flag & STRUCT_ID) && + !(prop->flag_internal & PROP_INTERN_PTR_OWNERSHIP_FORCED)) { prop->flag |= PROP_PTR_NO_OWNERSHIP; } break; diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 7919c014bb2..bb791dd6e2d 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -1515,6 +1515,9 @@ void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag) void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag) { prop->flag &= ~flag; + if (flag & PROP_PTR_NO_OWNERSHIP) { + prop->flag_internal |= PROP_INTERN_PTR_OWNERSHIP_FORCED; + } } void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag) diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h index bc83ed25ce5..345d84fc5b1 100644 --- a/source/blender/makesrna/intern/rna_internal_types.h +++ b/source/blender/makesrna/intern/rna_internal_types.h @@ -329,6 +329,9 @@ typedef enum PropertyFlagIntern { PROP_INTERN_RAW_ACCESS = (1 << 2), PROP_INTERN_RAW_ARRAY = (1 << 3), PROP_INTERN_FREE_POINTERS = (1 << 4), + /* Negative mirror of PROP_PTR_NO_OWNERSHIP, used to prevent automatically setting that one in + * makesrna when pointer is an ID... */ + PROP_INTERN_PTR_OWNERSHIP_FORCED = (1 << 5), } PropertyFlagIntern; /* Property Types */ |