diff options
author | Bastien Montagne <bastien@blender.org> | 2020-06-09 20:35:11 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-06-10 10:38:34 +0300 |
commit | edb4e553f506c858e7df5e45ad6235cd59a181eb (patch) | |
tree | 0d7b7a652fab333f2f45cdbdd348f35353703a3f /source/blender/makesrna/RNA_types.h | |
parent | 2d1b560a4e29567e4d9c3b964dc7d6a7bfd8056c (diff) |
LibOverride: Fix issues related to ID name differences.
Local datablocks (including overrides) need to have a unique name, which
can then differ from the reference linked one (especially when there are
several local overrides of a same linked data).
Issue is, ID name is a 'rna name property', and as such used as
reference when dealing with override of collections of IDs, so we cannot
have a changing name.
The solution implemented here should work and is simple, but it may have
some issues in corner cases (time will say), it is not really robust.
Alternative solution would be to store ID pointers as reference in
override operations, instead of there name. But that would potentially
add quiet a lot of overhead to foreach looping in `lib_query.c`.
Diffstat (limited to 'source/blender/makesrna/RNA_types.h')
-rw-r--r-- | source/blender/makesrna/RNA_types.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index 2a5d3890150..ee7c045ebf9 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -299,6 +299,18 @@ typedef enum PropertyOverrideFlag { */ PROPOVERRIDE_NO_COMPARISON = (1 << 1), + /** + * Means the property can be fully ignored by override process. + * Unlike NO_COMPARISON, it can still be used by diffing code, but no override operation will be + * created for it, and no attempt to restore the data from linked reference either. + * + * WARNING: This flag should be used with a lot of caution, as it completely by-passes override + * system. It is currently only used for ID's names, since we cannot prevent local override to + * get a different name from the linked reference, and ID names are 'rna name property' (i.e. are + * used in overrides of collections of IDs). See also `BKE_lib_override_library_update()` where + * we deal manually with the value of that property at DNA level. */ + PROPOVERRIDE_IGNORE = (1 << 2), + /*** Collections-related ***/ /** The property supports insertion (collections only). */ |