[Bf-blender-cvs] [3a9619af80e] blender-v2.93-release: Fix T95601: Missing handling of keyingsets ID pointers in lib_query/foreach_id code

Bastien Montagne noreply at git.blender.org
Tue Feb 22 10:27:12 CET 2022


Commit: 3a9619af80e1c95d4789fbccccbce6575e4cce0e
Author: Bastien Montagne
Date:   Mon Feb 21 11:40:35 2022 +0100
Branches: blender-v2.93-release
https://developer.blender.org/rB3a9619af80e1c95d4789fbccccbce6575e4cce0e

Fix T95601: Missing handling of keyingsets ID pointers in lib_query/foreach_id code

Fix T95601: Missing handling of keyingsets ID pointers in lib_query/foreach_id code.

This will have to be backported to 2.93 and possibly 2.83 if possible.

===================================================================

M	source/blender/blenkernel/BKE_animsys.h
M	source/blender/blenkernel/intern/anim_sys.c
M	source/blender/blenkernel/intern/scene.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index d43332ae1ac..3a441e5e535 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -39,6 +39,7 @@ struct FCurve;
 struct ID;
 struct KS_Path;
 struct KeyingSet;
+struct LibraryForeachIDData;
 struct ListBase;
 struct Main;
 struct NlaKeyframingContext;
@@ -94,6 +95,9 @@ struct KS_Path *BKE_keyingset_find_path(struct KeyingSet *ks,
 /* Copy all KeyingSets in the given list */
 void BKE_keyingsets_copy(struct ListBase *newlist, const struct ListBase *list);
 
+/** Process the ID pointers inside a scene's keyingsets, in see `BKE_lib_query.h` for details. */
+void BKE_keyingsets_foreach_id(struct LibraryForeachIDData *data, const struct ListBase *keyingsets);
+
 /* Free the given Keying Set path */
 void BKE_keyingset_free_path(struct KeyingSet *ks, struct KS_Path *ksp);
 
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 0155fdeef63..51bda5915e6 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -57,6 +57,7 @@
 #include "BKE_fcurve.h"
 #include "BKE_global.h"
 #include "BKE_lib_id.h"
+#include "BKE_lib_query.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
 #include "BKE_nla.h"
@@ -271,6 +272,15 @@ void BKE_keyingsets_copy(ListBase *newlist, const ListBase *list)
   }
 }
 
+void BKE_keyingsets_foreach_id(LibraryForeachIDData *data, const ListBase *keyingsets)
+{
+  for (KeyingSet *ksn = keyingsets->first; ksn; ksn = ksn->next) {
+    for (KS_Path *kspn = ksn->paths.first; kspn; kspn = kspn->next) {
+      BKE_LIB_FOREACHID_PROCESS_ID(data, kspn->id, IDWALK_CB_NOP);
+    }
+  }
+}
+
 /* Freeing Tools --------------------------- */
 
 /* Free data for KeyingSet but not set itself */
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 17ff8088355..eb61ce44b5b 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -734,6 +734,8 @@ static void scene_foreach_id(ID *id, LibraryForeachIDData *data)
     SEQ_ALL_END;
   }
 
+  BKE_keyingsets_foreach_id(data, &scene->keyingsets);
+
   /* This pointer can be NULL during old files reading, better be safe than sorry. */
   if (scene->master_collection != NULL) {
     BKE_library_foreach_ID_embedded(data, (ID **)&scene->master_collection);



More information about the Bf-blender-cvs mailing list