[Bf-blender-cvs] [3a9a37d6dcc] blender-v3.1-release: Fix T95601: Missing handling of keyingsets ID pointers in lib_query/foreach_id code.

Bastien Montagne noreply at git.blender.org
Mon Feb 14 12:07:44 CET 2022


Commit: 3a9a37d6dccb0a981b1fad0cda977b4a445341a1
Author: Bastien Montagne
Date:   Mon Feb 14 12:05:11 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rB3a9a37d6dccb0a981b1fad0cda977b4a445341a1

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 4845807de39..77e0de611d3 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;
@@ -102,6 +103,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 b5ea68aaadc..0698311ba4b 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"
@@ -265,6 +266,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 --------------------------- */
 
 void BKE_keyingset_free(KeyingSet *ks)
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index ed9f10aaa91..203676d0dd8 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -816,6 +816,9 @@ static void scene_foreach_id(ID *id, LibraryForeachIDData *data)
         data, SEQ_for_each_callback(&scene->ed->seqbase, seq_foreach_member_id_cb, data));
   }
 
+  BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(data,
+                                          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_LIB_FOREACHID_PROCESS_FUNCTION_CALL(



More information about the Bf-blender-cvs mailing list