From c48e1467384d6069b1a4f8c7bc4d7fa239c2b545 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 22 Jun 2011 12:54:26 +0000 Subject: Bugfix [#21276] The Tab key is not working in the Graph Editor when the list of animated curves is closed At long last, this old bludger can be put out to pasture. I figured it would involve some of the visibility-filtering stuff I added, but this required a bit extra effort than anticipated. --- source/blender/editors/animation/anim_channels_edit.c | 11 ++++++++--- source/blender/editors/animation/anim_filter.c | 9 ++++++--- source/blender/editors/include/ED_anim_api.h | 19 ------------------- 3 files changed, 14 insertions(+), 25 deletions(-) (limited to 'source') diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index fa52bdcb854..e7edafdddf5 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -1428,9 +1428,14 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode, * - but for Graph Editor, this gets used also from main region * where hierarchy doesn't apply [#21276] */ - // FIXME: graph editor case - // XXX: noduplis enabled so that results don't cancel, but will be problematic for some channels where only type differs - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_NODUPLIS); + if ((ac->spacetype == SPACE_IPO) && (ac->regiontype != RGN_TYPE_CHANNELS)) { + /* graph editor (case 2) */ + filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_NODUPLIS); + } + else { + /* standard case */ + filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_NODUPLIS); + } if (onlysel) filter |= ANIMFILTER_SEL; ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 04d8aa87e14..1f96778c36e 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -964,10 +964,13 @@ static size_t animdata_filter_action (bAnimContext *ac, ListBase *anim_data, bDo filter_gmode= filter_mode; /* if we care about the selection status of the channels, - * but the group isn't expanded... + * but the group isn't expanded (1)... + * (1) this only matters if we actually care about the hierarchy though, + * so if we're not filtering for that, then we shouldn't care, otherwise + * cases like [#21276] won't work properly */ - if ( (filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) && /* care about selection status */ - (EXPANDED_AGRP(ac, agrp)==0) ) /* group isn't expanded */ + if ( ((filter_mode & ANIMFILTER_LIST_VISIBLE) && EXPANDED_AGRP(ac, agrp)==0) && /* care about hierarchy but group isn't expanded */ + (filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) ) /* care about selection status */ { /* if the group itself isn't selected appropriately, we shouldn't consider it's children either */ if (ANIMCHANNEL_SELOK(SEL_AGRP(agrp)) == 0) diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 36e52fa8b8f..e8e179e8c84 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -183,25 +183,6 @@ typedef enum eAnim_KeyType { /* ----------------- Filtering -------------------- */ -#if 0 /// old -/* filtering flags - under what circumstances should a channel be added */ -typedef enum eAnimFilter_Flags { - ANIMFILTER_VISIBLE = (1<<0), /* should channels be visible (in terms of hierarchy only) */ - //ANIMFILTER_SEL = (1<<1), /* should channels be selected */ - //ANIMFILTER_UNSEL = (1<<2), /* should channels be NOT selected */ - //ANIMFILTER_FOREDIT = (1<<3), /* does editable status matter */ - ANIMFILTER_CURVESONLY = (1<<4), /* don't include summary-channels, etc. */ // double-check on how this goes for actedit - ANIMFILTER_CHANNELS = (1<<5), /* make list for interface drawing */ - //ANIMFILTER_ACTGROUPED = (1<<6), /* belongs to the active actiongroup */ - ANIMFILTER_CURVEVISIBLE = (1<<7), /* F-Curve is visible for editing/viewing in Graph Editor */ - //ANIMFILTER_ACTIVE = (1<<8), /* channel should be 'active' */ - //ANIMFILTER_ANIMDATA = (1<<9), /* only return the underlying AnimData blocks (not the tracks, etc.) data comes from */ - ANIMFILTER_NLATRACKS = (1<<10), /* only include NLA-tracks */ - //ANIMFILTER_SELEDIT = (1<<11), /* link editability with selected status */ - //ANIMFILTER_NODUPLIS = (1<<12), /* duplicate entries for animation data attached to multi-user blocks must not occur */ -} eAnimFilter_Flags; -#endif - /* filtering flags - under what circumstances should a channel be returned */ // TODO: flag to just test if there's any channel inside worthy of being added - return 1 as soon as this is encountered, but don't add typedef enum eAnimFilter_Flags { -- cgit v1.2.3