diff options
author | Fabian Schempp <fabianschempp@googlemail.com> | 2022-04-18 23:28:08 +0300 |
---|---|---|
committer | Fabian Schempp <fabianschempp@googlemail.com> | 2022-04-18 23:28:08 +0300 |
commit | 01616f9ed2da14b5cad40efac03d1a22dbb759f3 (patch) | |
tree | 4955ad12f260e557aa1c0f724a320e565f8bce5c /source/blender/blenkernel/intern/lib_remap.c | |
parent | f06d361da1249c93568153bae88bcdf43b4774a1 (diff) | |
parent | 314b27850ccb6d103cf5c73855187cfc11ec48d8 (diff) |
Merge branch 'master' into soc-2021-porting-modifiers-to-nodes-remesh-voxel
Diffstat (limited to 'source/blender/blenkernel/intern/lib_remap.c')
-rw-r--r-- | source/blender/blenkernel/intern/lib_remap.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/lib_remap.c b/source/blender/blenkernel/intern/lib_remap.c index 1a6fcf5ff43..2b449ad50bb 100644 --- a/source/blender/blenkernel/intern/lib_remap.c +++ b/source/blender/blenkernel/intern/lib_remap.c @@ -317,7 +317,8 @@ static void libblock_remap_data_preprocess(ID *id_owner, */ static void libblock_remap_data_postprocess_object_update(Main *bmain, Object *old_ob, - Object *new_ob) + Object *new_ob, + const bool do_sync_collection) { if (new_ob == NULL) { /* In case we unlinked old_ob (new_ob is NULL), the object has already @@ -331,7 +332,9 @@ static void libblock_remap_data_postprocess_object_update(Main *bmain, BKE_collections_object_remove_duplicates(bmain); } - BKE_main_collection_sync_remap(bmain); + if (do_sync_collection) { + BKE_main_collection_sync_remap(bmain); + } if (old_ob == NULL) { for (Object *ob = bmain->objects.first; ob != NULL; ob = ob->id.next) { @@ -567,7 +570,8 @@ static void libblock_remap_foreach_idpair_cb(ID *old_id, ID *new_id, void *user_ * Maybe we should do a per-ID callback for this instead? */ switch (GS(old_id->name)) { case ID_OB: - libblock_remap_data_postprocess_object_update(bmain, (Object *)old_id, (Object *)new_id); + libblock_remap_data_postprocess_object_update( + bmain, (Object *)old_id, (Object *)new_id, true); break; case ID_GR: libblock_remap_data_postprocess_collection_update( @@ -719,7 +723,7 @@ static void libblock_relink_foreach_idpair_cb(ID *old_id, ID *new_id, void *user case ID_OB: if (!is_object_update_processed) { libblock_remap_data_postprocess_object_update( - bmain, (Object *)old_id, (Object *)new_id); + bmain, (Object *)old_id, (Object *)new_id, true); is_object_update_processed = true; } break; @@ -781,11 +785,14 @@ void BKE_libblock_relink_multiple(Main *bmain, (Collection *)id_iter : ((Scene *)id_iter)->master_collection; /* No choice but to check whole objects once, and all children collections. */ - libblock_remap_data_postprocess_collection_update(bmain, owner_collection, NULL, NULL); if (!is_object_update_processed) { - libblock_remap_data_postprocess_object_update(bmain, NULL, NULL); + /* We only want to affect Object pointers here, not Collection ones, LayerCollections + * will be resynced as part of the call to + * `libblock_remap_data_postprocess_collection_update` below. */ + libblock_remap_data_postprocess_object_update(bmain, NULL, NULL, false); is_object_update_processed = true; } + libblock_remap_data_postprocess_collection_update(bmain, owner_collection, NULL, NULL); break; } default: |