diff options
author | Bastien Montagne <bastien@blender.org> | 2020-07-20 20:14:37 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-07-20 20:18:45 +0300 |
commit | bb63ce9839322c2730721ffd552edc98c875d897 (patch) | |
tree | 6631ebf12446ee986a6388863f1b7c7d755918ab /source/blender | |
parent | 62a819202e79ed41651a1e3d9b686a6363ef20cb (diff) |
Fix (unreported) bad handling of shapekeys when applying override rules.
We need to do a full proper swap of those shape keys as well, previous
code ended up breaking relationships between data-blocks...
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/lib_override.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c index fc84ec0b314..322149bc3ce 100644 --- a/source/blender/blenkernel/intern/lib_override.c +++ b/source/blender/blenkernel/intern/lib_override.c @@ -1276,8 +1276,6 @@ void BKE_lib_override_library_update(Main *bmain, ID *local) Key *local_key = BKE_key_from_id(local); Key *tmp_key = BKE_key_from_id(tmp_id); if (local_key != NULL && tmp_key != NULL) { - /* This is some kind of hard-coded 'always enforced override'... */ - tmp_key->from = local_key->from; tmp_key->id.flag |= (local_key->id.flag & LIB_EMBEDDED_DATA_LIB_OVERRIDE); } @@ -1296,6 +1294,12 @@ void BKE_lib_override_library_update(Main *bmain, ID *local) * So when we'll free tmp_id, we'll actually free old, outdated data from local. */ BKE_lib_id_swap(bmain, local, tmp_id); + if (local_key != NULL && tmp_key != NULL) { + /* This is some kind of hard-coded 'always enforced override'... */ + BKE_lib_id_swap(bmain, &local_key->id, &tmp_key->id); + tmp_key->id.flag |= (local_key->id.flag & LIB_EMBEDDED_DATA_LIB_OVERRIDE); + } + /* Again, horribly inn-efficient in our case, we need something off-Main * (aka more generic nolib copy/free stuff)! */ /* XXX And crashing in complex cases (e.g. because depsgraph uses same data...). */ |