forked from bartvdbraak/blender
Bugfix [#36687] Animation channels can't be grouped in action editor
Internal filtering flags used to obtain AnimData blocks as result were not working correctly in Action and ShapeKey modes. Instead, in these modes, they were often returning F-Curves instead, which lead to the grouping operating failing (and perhaps other unidentified bugs)
This commit is contained in:
parent
5c0a8ca73f
commit
a8a4431fcf
@ -2624,24 +2624,50 @@ size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mo
|
|||||||
|
|
||||||
/* firstly filter the data */
|
/* firstly filter the data */
|
||||||
switch (datatype) {
|
switch (datatype) {
|
||||||
|
/* Action-Editing Modes */
|
||||||
case ANIMCONT_ACTION: /* 'Action Editor' */
|
case ANIMCONT_ACTION: /* 'Action Editor' */
|
||||||
{
|
{
|
||||||
Object *obact = ac->obact;
|
Object *obact = ac->obact;
|
||||||
SpaceAction *saction = (SpaceAction *)ac->sl;
|
SpaceAction *saction = (SpaceAction *)ac->sl;
|
||||||
bDopeSheet *ads = (saction) ? &saction->ads : NULL;
|
bDopeSheet *ads = (saction) ? &saction->ads : NULL;
|
||||||
|
|
||||||
|
/* specially check for AnimData filter... [#36687] */
|
||||||
|
if (UNLIKELY(filter_mode & ANIMFILTER_ANIMDATA)) {
|
||||||
|
/* all channels here are within the same AnimData block, hence this special case */
|
||||||
|
if (LIKELY(obact->adt)) {
|
||||||
|
ANIMCHANNEL_NEW_CHANNEL(obact->adt, ANIMTYPE_ANIMDATA, (ID *)obact);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
/* the check for the DopeSheet summary is included here since the summary works here too */
|
/* the check for the DopeSheet summary is included here since the summary works here too */
|
||||||
if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
|
if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
|
||||||
items += animfilter_action(ac, anim_data, ads, data, filter_mode, (ID *)obact);
|
items += animfilter_action(ac, anim_data, ads, data, filter_mode, (ID *)obact);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ANIMCONT_SHAPEKEY: /* 'ShapeKey Editor' */
|
case ANIMCONT_SHAPEKEY: /* 'ShapeKey Editor' */
|
||||||
{
|
{
|
||||||
|
Key *key = (Key *)data;
|
||||||
|
|
||||||
|
/* specially check for AnimData filter... [#36687] */
|
||||||
|
if (UNLIKELY(filter_mode & ANIMFILTER_ANIMDATA)) {
|
||||||
|
/* all channels here are within the same AnimData block, hence this special case */
|
||||||
|
if (LIKELY(key->adt)) {
|
||||||
|
ANIMCHANNEL_NEW_CHANNEL(key->adt, ANIMTYPE_ANIMDATA, (ID *)key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
/* the check for the DopeSheet summary is included here since the summary works here too */
|
/* the check for the DopeSheet summary is included here since the summary works here too */
|
||||||
if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
|
if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
|
||||||
items = animdata_filter_shapekey(ac, anim_data, data, filter_mode);
|
items = animdata_filter_shapekey(ac, anim_data, key, filter_mode);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Modes for Specialty Data Types (i.e. not keyframes) */
|
||||||
case ANIMCONT_GPENCIL:
|
case ANIMCONT_GPENCIL:
|
||||||
{
|
{
|
||||||
if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
|
if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
|
||||||
@ -2654,6 +2680,9 @@ size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mo
|
|||||||
items = animdata_filter_mask(anim_data, data, filter_mode);
|
items = animdata_filter_mask(anim_data, data, filter_mode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* DopeSheet Based Modes */
|
||||||
case ANIMCONT_DOPESHEET: /* 'DopeSheet Editor' */
|
case ANIMCONT_DOPESHEET: /* 'DopeSheet Editor' */
|
||||||
{
|
{
|
||||||
/* the DopeSheet editor is the primary place where the DopeSheet summaries are useful */
|
/* the DopeSheet editor is the primary place where the DopeSheet summaries are useful */
|
||||||
@ -2669,6 +2698,9 @@ size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mo
|
|||||||
items = animdata_filter_dopesheet(ac, anim_data, data, filter_mode);
|
items = animdata_filter_dopesheet(ac, anim_data, data, filter_mode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Special/Internal Use */
|
||||||
case ANIMCONT_CHANNEL: /* animation channel */
|
case ANIMCONT_CHANNEL: /* animation channel */
|
||||||
{
|
{
|
||||||
bDopeSheet *ads = ac->ads;
|
bDopeSheet *ads = ac->ads;
|
||||||
|
Loading…
Reference in New Issue
Block a user