From 5114637967b5d57de9176a01e5c180bab909dd63 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Thu, 11 Jun 2015 19:34:21 +0200 Subject: [PATCH] Fix T45016, mask animation data lost after layer rename We need to fix up animation data. --- source/blender/blenkernel/BKE_mask.h | 1 + source/blender/blenkernel/intern/mask.c | 11 +++++++++++ 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)