From 579efb097d7fba1215de39177aaedbfa0f0e3f33 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 8 Jul 2011 11:57:25 +0000 Subject: Deleting Grease Pencil layers from Action-Editor works again --- .../blender/editors/animation/anim_channels_edit.c | 39 ++++++++++++++-------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'source/blender/editors/animation/anim_channels_edit.c') diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index ff6bd3547ce..864bf8e55de 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -1171,28 +1171,41 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op)) BLI_freelistN(&anim_data); } - /* now do F-Curves */ - if (ac.datatype != ANIMCONT_GPENCIL) { - /* filter data */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); - ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - - /* delete selected F-Curves */ - for (ale= anim_data.first; ale; ale= ale->next) { - /* only F-Curves, and only if we can identify its parent */ - if (ale->type == ANIMTYPE_FCURVE) { + /* filter data */ + filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* delete selected data channels */ + for (ale= anim_data.first; ale; ale= ale->next) { + switch (ale->type) { + case ANIMTYPE_FCURVE: + { + /* F-Curves if we can identify its parent */ AnimData *adt= ale->adt; FCurve *fcu= (FCurve *)ale->data; /* try to free F-Curve */ ANIM_fcurve_delete_from_animdata(&ac, adt, fcu); } + break; + + case ANIMTYPE_GPLAYER: + { + /* Grease Pencil layer */ + bGPdata *gpd= (bGPdata *)ale->id; + bGPDlayer *gpl= (bGPDlayer *)ale->data; + + /* try to delete the layer's data and the layer itself */ + free_gpencil_frames(gpl); + BLI_freelinkN(&gpd->layers, gpl); + } + break; } - - /* cleanup */ - BLI_freelistN(&anim_data); } + /* cleanup */ + BLI_freelistN(&anim_data); + /* send notifier that things have changed */ WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL); -- cgit v1.2.3