diff options
author | Bastien Montagne <bastien@blender.org> | 2020-05-26 13:25:17 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-05-26 13:33:28 +0300 |
commit | b44c3ac1e9fa48d97c1acb6a45d84647be4ab5f2 (patch) | |
tree | 77b12c6c66c55688e63c232576ac7cc6236a24f5 /source/blender/blenloader/intern/versioning_250.c | |
parent | 4835a09bb1ea8dfc7feefc3b1c336f0baebbccf4 (diff) |
Fix/Cleanup: Move some animdata versioning code out of liblinking process.
This was propably added way before we had the after-lib-link versionning
code, but now doing that sort of fixes at liblink time is bad.
Diffstat (limited to 'source/blender/blenloader/intern/versioning_250.c')
-rw-r--r-- | source/blender/blenloader/intern/versioning_250.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c index 62cda5d8feb..a68a366f22b 100644 --- a/source/blender/blenloader/intern/versioning_250.c +++ b/source/blender/blenloader/intern/versioning_250.c @@ -61,6 +61,7 @@ #include "BLI_math.h" #include "BLI_utildefines.h" +#include "BKE_anim_data.h" #include "BKE_anim_visualization.h" #include "BKE_armature.h" #include "BKE_colortools.h" @@ -2352,4 +2353,32 @@ void do_versions_after_linking_250(Main *bmain) } FOREACH_NODETREE_END; } + + if (!MAIN_VERSION_ATLEAST(bmain, 258, 0)) { + /* Some very old (original comments claim pre-2.57) versionning that was wrongly done in + * lib-linking code... Putting it here just to be sure (this is also checked at runtime anyway + * by `action_idcode_patch_check`). */ + ID *id; + FOREACH_MAIN_ID_BEGIN (bmain, id) { + AnimData *adt = BKE_animdata_from_id(id); + if (adt != NULL) { + /* Fix actions' id-roots (i.e. if they come from a pre 2.57 .blend file). */ + if ((adt->action) && (adt->action->idroot == 0)) { + adt->action->idroot = GS(id->name); + } + if ((adt->tmpact) && (adt->tmpact->idroot == 0)) { + adt->tmpact->idroot = GS(id->name); + } + + LISTBASE_FOREACH (NlaTrack *, nla_track, &adt->nla_tracks) { + LISTBASE_FOREACH (NlaStrip *, nla_strip, &nla_track->strips) { + if ((nla_strip->act) && (nla_strip->act->idroot == 0)) { + nla_strip->act->idroot = GS(id->name); + } + } + } + } + } + FOREACH_MAIN_ID_END; + } } |