Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Schempp <fabianschempp@googlemail.com>2022-04-18 23:28:08 +0300
committerFabian Schempp <fabianschempp@googlemail.com>2022-04-18 23:28:08 +0300
commit01616f9ed2da14b5cad40efac03d1a22dbb759f3 (patch)
tree4955ad12f260e557aa1c0f724a320e565f8bce5c /source/blender/blenkernel/intern/lib_remap.c
parentf06d361da1249c93568153bae88bcdf43b4774a1 (diff)
parent314b27850ccb6d103cf5c73855187cfc11ec48d8 (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.c19
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: