Bugfix [#28962] Changing actions via undo/delete all keyframes lacks UI refresh
Slightly hacky fix to get updates working for Action Editor header when there are changes of the active action (via undo and/or deleting all keyframes at once). Since the action referenced by the editor only gets updated when anim channel filtering (e.g. as a result of the channel syncing operation) is invoked. Added comments noting where these updates actually occur
This commit is contained in:
@@ -5551,6 +5551,12 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
|
||||
|
||||
if (saction->ads.filter_grp)
|
||||
saction->ads.filter_grp= restore_pointer_by_name(newmain, (ID *)saction->ads.filter_grp, 0);
|
||||
|
||||
|
||||
/* force recalc of list of channels, potentially updating the active action
|
||||
* while we're at it (as it can only be updated that way) [#28962]
|
||||
*/
|
||||
saction->flag |= SACTION_TEMP_NEEDCHANSYNC;
|
||||
}
|
||||
else if (sl->spacetype == SPACE_IMAGE) {
|
||||
SpaceImage *sima = (SpaceImage *)sl;
|
||||
|
||||
@@ -435,6 +435,12 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case NC_WINDOW:
|
||||
if (saction->flag & SACTION_TEMP_NEEDCHANSYNC) {
|
||||
/* force redraw/refresh after undo/redo - [#28962] */
|
||||
ED_area_tag_refresh(sa);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,9 +470,21 @@ static void action_refresh(const bContext *C, ScrArea *sa)
|
||||
* NOTE: the temp flag is used to indicate when this needs to be done, and will be cleared once handled
|
||||
*/
|
||||
if (saction->flag & SACTION_TEMP_NEEDCHANSYNC) {
|
||||
ARegion *ar;
|
||||
|
||||
/* Perform syncing of channel state incl. selection
|
||||
* Active action setting also occurs here (as part of anim channel filtering in anim_filter.c)
|
||||
*/
|
||||
ANIM_sync_animchannels_to_data(C);
|
||||
saction->flag &= ~SACTION_TEMP_NEEDCHANSYNC;
|
||||
|
||||
/* Tag everything for redraw
|
||||
* - Regions (such as header) need to be manually tagged for redraw too
|
||||
* or else they don't update [#28962]
|
||||
*/
|
||||
ED_area_tag_redraw(sa);
|
||||
for (ar = sa->regionbase.first; ar; ar = ar->next)
|
||||
ED_region_tag_redraw(ar);
|
||||
}
|
||||
|
||||
/* region updates? */
|
||||
|
||||
Reference in New Issue
Block a user