Bugfix [#28962] Changing actions via undo/delete all keyframes lacks UI refresh
authorJoshua Leung <aligorith@gmail.com>
Mon, 11 Jun 2012 04:13:39 +0000 (04:13 +0000)
committerJoshua Leung <aligorith@gmail.com>
Mon, 11 Jun 2012 04:13:39 +0000 (04:13 +0000)
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

source/blender/blenloader/intern/readfile.c
source/blender/editors/space_action/space_action.c

index 6cc81218a6b50cb23317461dfc4a7dc0b008a525..db4d40dd4c4a91b286d7c4c78ed96d3d83349ffd 100644 (file)
@@ -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;
index c8660179945fd6dada876ca87af3382fb64df5e0..db1d4ed1155119a4d3cc227c5c7797ccae00ec55 100644 (file)
@@ -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? */