From 8241678e6ec6cd84f097d892a000cf214b218957 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Fri, 7 May 2021 16:07:37 +0200 Subject: LibOverride: more tweaking to handling of obsolete overrides during resync. this is a followup to rB2bd85d9cc623, we cannot forcefully delete obsolete overrides of object data (meshes etc.), as this implies also deleting their user object, which might still be a perfectly valid override, albeit in conflict regarding its obdata ID pointer... --- source/blender/blenkernel/intern/lib_override.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern') diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c index a6bb8684864..54d14e33209 100644 --- a/source/blender/blenkernel/intern/lib_override.c +++ b/source/blender/blenkernel/intern/lib_override.c @@ -907,7 +907,11 @@ bool BKE_lib_override_library_resync(Main *bmain, * override hierarchy anymore. This will ensure they get properly deleted at the end of this * function. */ if (!ID_IS_LINKED(id) && ID_IS_OVERRIDE_LIBRARY_REAL(id) && - (id->override_library->reference->tag & LIB_TAG_MISSING) != 0) { + (id->override_library->reference->tag & LIB_TAG_MISSING) != 0 && + /* Unfortunately deleting obdata means deleting their objects too. Since there is no + * guarantee that a valid override object using an obsolete override obdata gets properly + * updated, we ignore those here for now. In practice this should not be a big issue. */ + !OB_DATA_SUPPORT_ID(GS(id->name))) { id->tag |= LIB_TAG_MISSING; } -- cgit v1.2.3