diff options
author | Bastien Montagne <mont29> | 2022-02-21 13:40:35 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2022-02-21 13:40:35 +0300 |
commit | 3a9619af80e1c95d4789fbccccbce6575e4cce0e (patch) | |
tree | 8d1bd0fbe1ff9461bbc30f1db6e8b89932568b77 | |
parent | 1ee4e6bf31ff32f87f9cd1eafa548d6811794380 (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.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/anim_sys.c | 10 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 2 |
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); |