From 3bdc42f97a837766aec2bcd57917ef631570304f Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 30 Nov 2020 17:17:43 +0100 Subject: [PATCH] Fix T82996: Library Overrides: Duplicate of overridden collection on Resync Properly use given reference pointer in `lib_override_library_create_post_process` when it is a Collection one too. --- source/blender/blenkernel/intern/lib_override.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c index bcefcd5f001..d82315a0e7f 100644 --- a/source/blender/blenkernel/intern/lib_override.c +++ b/source/blender/blenkernel/intern/lib_override.c @@ -551,6 +551,10 @@ static void lib_override_library_create_post_process( if (ob_reference != NULL) { BKE_collection_add_from_object(bmain, scene, ob_reference, collection_new); } + else if (id_reference != NULL) { + BKE_collection_add_from_collection( + bmain, scene, ((Collection *)id_reference), collection_new); + } else { BKE_collection_add_from_collection(bmain, scene, ((Collection *)id_root), collection_new); } @@ -841,6 +845,10 @@ bool BKE_lib_override_library_resync(Main *bmain, Scene *scene, ViewLayer *view_ id_root = id_root_reference->newid; /* Essentially ensures that potentially new overrides of new objects will be instantiated. */ + /* Note: Here 'reference' collection and 'newly added' collection are the same, which is fine + * since we already relinked old root override collection to new resync'ed one above. So this + * call is not expected to instantiate this new resync'ed collection anywhere, just to ensure + * that we do not have any stray objects. */ lib_override_library_create_post_process(bmain, scene, view_layer, id_root_reference, id_root); /* Cleanup. */