diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2015-06-11 20:34:21 +0300 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2015-06-11 20:34:21 +0300 |
commit | 5114637967b5d57de9176a01e5c180bab909dd63 (patch) | |
tree | 8bf5b66ce97411ae2a343cf1a9cc36da6b967fad /source | |
parent | 8c2619a11a155ecd8c331eb383a9c0749bb965ab (diff) |
Fix T45016, mask animation data lost after layer rename
We need to fix up animation data.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_mask.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mask.c | 11 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_mask.c | 7 |
3 files changed, 17 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_mask.h b/source/blender/blenkernel/BKE_mask.h index 3db4d9e7324..2f85db4d5d2 100644 --- a/source/blender/blenkernel/BKE_mask.h +++ b/source/blender/blenkernel/BKE_mask.h @@ -79,6 +79,7 @@ struct MaskSpline *BKE_mask_spline_copy(struct MaskSpline *spline); void BKE_mask_point_free(struct MaskSplinePoint *point); void BKE_mask_layer_unique_name(struct Mask *mask, struct MaskLayer *masklay); +void BKE_mask_layer_rename(struct Mask *mask, struct MaskLayer *masklay, char *oldname, char *newname); struct MaskLayer *BKE_mask_layer_copy(struct MaskLayer *layer); void BKE_mask_layer_copy_list(struct ListBase *masklayers_new, struct ListBase *masklayers); diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index 83ca6cd8d72..dd179ff91d2 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -49,6 +49,7 @@ #include "DNA_space_types.h" #include "DNA_sequence_types.h" +#include "BKE_animsys.h" #include "BKE_curve.h" #include "BKE_global.h" #include "BKE_library.h" @@ -181,6 +182,16 @@ void BKE_mask_layer_unique_name(Mask *mask, MaskLayer *masklay) sizeof(masklay->name)); } +void BKE_mask_layer_rename(Mask *mask, MaskLayer *masklay, char *oldname, char *newname) +{ + BLI_strncpy(masklay->name, newname, sizeof(masklay->name)); + + BKE_mask_layer_unique_name(mask, masklay); + + /* now fix animation paths */ + BKE_animdata_fix_paths_rename_all(&mask->id, "layers", oldname, masklay->name); +} + MaskLayer *BKE_mask_layer_copy(MaskLayer *masklay) { MaskLayer *masklay_new; diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c index afd149a755a..4144872a637 100644 --- a/source/blender/makesrna/intern/rna_mask.c +++ b/source/blender/makesrna/intern/rna_mask.c @@ -213,10 +213,13 @@ static void rna_MaskLayer_name_set(PointerRNA *ptr, const char *value) { Mask *mask = (Mask *)ptr->id.data; MaskLayer *masklay = (MaskLayer *)ptr->data; + char oldname[sizeof(masklay->name)], newname[sizeof(masklay->name)]; - BLI_strncpy(masklay->name, value, sizeof(masklay->name)); + /* need to be on the stack */ + BLI_strncpy(oldname, masklay->name, sizeof(masklay->name)); + BLI_strncpy_utf8(newname, value, sizeof(masklay->name)); - BKE_mask_layer_unique_name(mask, masklay); + BKE_mask_layer_rename(mask, masklay, oldname, newname); } static PointerRNA rna_MaskLayer_active_spline_get(PointerRNA *ptr) |