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:
authorBastien Montagne <mont29>2022-02-21 13:40:35 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2022-02-21 13:40:35 +0300
commit3a9619af80e1c95d4789fbccccbce6575e4cce0e (patch)
tree8d1bd0fbe1ff9461bbc30f1db6e8b89932568b77
parent1ee4e6bf31ff32f87f9cd1eafa548d6811794380 (diff)
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.
-rw-r--r--source/blender/blenkernel/BKE_animsys.h4
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c10
-rw-r--r--source/blender/blenkernel/intern/scene.c2
3 files changed, 16 insertions, 0 deletions
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);