Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2019-05-02 14:51:43 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2019-05-02 14:56:25 +0300
commit6047653ec04efbc556506adad835cc83eb4c7dcf (patch)
treeed679c235fc8faa4379d2855a99037c0b0364259 /source/blender
parent667af6cf411918ba181afc1a7d6bcb474f9fadb8 (diff)
Fix T63904: Remove Animation should remove empty actions from objects.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/animation/anim_channels_edit.c18
-rw-r--r--source/blender/editors/animation/keyframing.c5
-rw-r--r--source/blender/editors/include/ED_anim_api.h3
3 files changed, 24 insertions, 2 deletions
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c
index 40abf8a12bb..6e0277d5fff 100644
--- a/source/blender/editors/animation/anim_channels_edit.c
+++ b/source/blender/editors/animation/anim_channels_edit.c
@@ -649,14 +649,28 @@ void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, AnimData *adt, FCurve *f
* channel list that are empty, and linger around long after the data they
* are for has disappeared (and probably won't come back).
*/
+ ANIM_remove_empty_action_from_animdata(adt);
+ }
+
+ /* free the F-Curve itself */
+ free_fcurve(fcu);
+}
+
+/* If the action has no F-Curves, unlink it from AnimData if it did not
+ * come from a NLA Strip being tweaked. */
+bool ANIM_remove_empty_action_from_animdata(struct AnimData *adt)
+{
+ if (adt->action != NULL) {
+ bAction *act = adt->action;
+
if (BLI_listbase_is_empty(&act->curves) && (adt->flag & ADT_NLA_EDIT_ON) == 0) {
id_us_min(&act->id);
adt->action = NULL;
+ return true;
}
}
- /* free the F-Curve itself */
- free_fcurve(fcu);
+ return false;
}
/* ************************************************************************** */
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index 9b2e1af55e4..a0433b49b16 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -2209,6 +2209,11 @@ static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
changed = true;
}
}
+
+ /* Delete the action itself if it is empty. */
+ if (ANIM_remove_empty_action_from_animdata(adt)) {
+ changed = true;
+ }
}
}
CTX_DATA_END;
diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h
index d314e9b4ca6..d947322f708 100644
--- a/source/blender/editors/include/ED_anim_api.h
+++ b/source/blender/editors/include/ED_anim_api.h
@@ -612,6 +612,9 @@ void ANIM_set_active_channel(bAnimContext *ac,
* as appropriate according to animation context */
void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, struct AnimData *adt, struct FCurve *fcu);
+/* Unlink the action from animdata if it's empty. */
+bool ANIM_remove_empty_action_from_animdata(struct AnimData *adt);
+
/* ************************************************ */
/* DRAWING API */
/* anim_draw.c */