Fix T40201: Keyframe edits fail to update the viewport
authorCampbell Barton <ideasman42@gmail.com>
Sun, 18 May 2014 14:24:45 +0000 (00:24 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 18 May 2014 14:24:45 +0000 (00:24 +1000)
23 files changed:
source/blender/blenlib/intern/listbase.c
source/blender/editors/animation/anim_channels_defines.c
source/blender/editors/animation/anim_channels_edit.c
source/blender/editors/animation/anim_deps.c
source/blender/editors/animation/keyframes_draw.c
source/blender/editors/animation/keyframes_edit.c
source/blender/editors/animation/keyframes_general.c
source/blender/editors/include/ED_anim_api.h
source/blender/editors/space_action/action_draw.c
source/blender/editors/space_action/action_edit.c
source/blender/editors/space_action/action_select.c
source/blender/editors/space_graph/graph_draw.c
source/blender/editors/space_graph/graph_edit.c
source/blender/editors/space_graph/graph_select.c
source/blender/editors/space_graph/graph_utils.c
source/blender/editors/space_graph/space_graph.c
source/blender/editors/space_nla/nla_buttons.c
source/blender/editors/space_nla/nla_channels.c
source/blender/editors/space_nla/nla_draw.c
source/blender/editors/space_nla/nla_edit.c
source/blender/editors/space_nla/nla_select.c
source/blender/editors/transform/transform_conversions.c
source/blender/editors/transform/transform_generics.c

index 17e7bf8a99b1b82c435ddf3c72bba8cdb6c8a220..76ad687de3c526d610c94ee2403073ff6a66d8a8 100644 (file)
@@ -313,9 +313,8 @@ void BLI_freelist(ListBase *listbase)
                free(link);
                link = next;
        }
-       
-       listbase->first = NULL;
-       listbase->last = NULL;
+
+       BLI_listbase_clear(listbase);
 }
 
 /**
@@ -331,9 +330,8 @@ void BLI_freelistN(ListBase *listbase)
                MEM_freeN(link);
                link = next;
        }
-       
-       listbase->first = NULL;
-       listbase->last = NULL;
+
+       BLI_listbase_clear(listbase);
 }
 
 
index 1cd1a26678d61c605542602d1dbd89d54e45b265..26ab4d84bed61a0510be1953108a74d899404c4b 100644 (file)
@@ -3569,7 +3569,7 @@ static void achannel_setting_flush_widget_cb(bContext *C, void *ale_npoin, void
        ANIM_flush_setting_anim_channels(&ac, &anim_data, ale_setting, setting, on);
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* callback for wrapping NLA Track "solo" toggle logic */
index 5d97b7be9f7d7b9aaf7d8d79e87e3b6882ae3f87..2b85cae440ecd390bc9e3c3b999615e80f72e303 100644 (file)
@@ -184,7 +184,7 @@ void ANIM_set_active_channel(bAnimContext *ac, void *data, short datatype, int f
        }
        
        /* clean up */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* Deselect all animation channels 
@@ -373,7 +373,7 @@ void ANIM_deselect_anim_channels(bAnimContext *ac, void *data, short datatype, s
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ---------------------------- Graph Editor ------------------------------------- */
@@ -1177,7 +1177,7 @@ static int animchannels_rearrange_exec(bContext *C, wmOperator *op)
                }
                
                /* free temp data */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        
        /* send notifier that things have changed */
@@ -1290,7 +1290,7 @@ static void animchannels_group_channels(bAnimContext *ac, bAnimListElem *adt_ref
                }
                
                /* cleanup */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
 }
 
@@ -1321,7 +1321,7 @@ static int animchannels_group_exec(bContext *C, wmOperator *op)
                }
                
                /* free temp data */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                
                /* updatss */
                WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
@@ -1393,7 +1393,7 @@ static int animchannels_ungroup_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* updates */
        WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
@@ -1470,7 +1470,7 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op))
                }
                
                /* cleanup */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        
        /* filter data */
@@ -1515,7 +1515,7 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* send notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
@@ -1586,7 +1586,7 @@ static int animchannels_visibility_set_exec(bContext *C, wmOperator *UNUSED(op))
                ANIM_flush_setting_anim_channels(&ac, &all_data, ale, ACHANNEL_SETTING_VISIBLE, 0);
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* make all the selected channels visible */
        filter = (ANIMFILTER_SEL | ANIMFILTER_NODUPLIS);
@@ -1605,7 +1605,7 @@ static int animchannels_visibility_set_exec(bContext *C, wmOperator *UNUSED(op))
                ANIM_flush_setting_anim_channels(&ac, &all_data, ale, ACHANNEL_SETTING_VISIBLE, 1);
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        BLI_freelistN(&all_data);
        
        
@@ -1683,7 +1683,7 @@ static int animchannels_visibility_toggle_exec(bContext *C, wmOperator *UNUSED(o
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        BLI_freelistN(&all_data);
        
        /* send notifier that things have changed */
@@ -1799,7 +1799,7 @@ static void setflag_anim_channels(bAnimContext *ac, short setting, short mode, s
                        ANIM_flush_setting_anim_channels(ac, &all_data, ale, setting, mode);
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        BLI_freelistN(&all_data);
 }
 
@@ -2064,11 +2064,11 @@ static int animchannels_enable_exec(bContext *C, wmOperator *UNUSED(op))
                        fcu->driver->flag &= ~DRIVER_FLAG_INVALID;
                        
                /* tag everything for updates - in particular, this is needed to get drivers working again */
-               ANIM_list_elem_update(ac.scene, ale);
+               ale->update |= ANIM_UPDATE_DEPS;
        }
        
-       /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_update(&ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
                
        /* send notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
@@ -2228,7 +2228,7 @@ static void borderselect_anim_channels(bAnimContext *ac, rcti *rect, short selec
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -2312,7 +2312,7 @@ static void rename_anim_channels(bAnimContext *ac, int channel_index)
                if (G.debug & G_DEBUG)
                        printf("Error: animation channel (index = %d) not found in rename_anim_channels()\n", channel_index);
                
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return;
        }
        
@@ -2338,7 +2338,7 @@ static void rename_anim_channels(bAnimContext *ac, int channel_index)
        }
        
        /* free temp data and tag for refresh */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        ED_region_tag_redraw(ac->ar);
 }
 
@@ -2413,7 +2413,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
                if (G.debug & G_DEBUG)
                        printf("Error: animation channel (index = %d) not found in mouse_anim_channels()\n", channel_index);
                
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return 0;
        }
 
@@ -2421,7 +2421,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
        /* TODO: should this feature be extended to work with other channel types too? */
        if ((selectmode == -1) && (ale->type != ANIMTYPE_GROUP)) {
                /* normal channels should not behave normally in this case */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return 0;
        }
 
@@ -2706,7 +2706,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
        }
        
        /* free channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* return notifier flags */
        return notifierFlags;
index c0543862265c5c818a2c81116f866407b2098967..5bffdfbcc4b753a15228f21b62303d322002a6f1 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
+#include "BKE_fcurve.h"
 #include "BKE_context.h"
 #include "BKE_depsgraph.h"
 #include "BKE_global.h"
@@ -341,5 +342,49 @@ void ANIM_sync_animchannels_to_data(const bContext *C)
                }
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
+}
+
+void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
+{
+       bAnimListElem *ale;
+
+       if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK))
+               return;
+
+       for (ale = anim_data->first; ale; ale = ale->next) {
+               FCurve *fcu = ale->key_data;
+
+               if (ale->update & ANIM_UPDATE_ORDER) {
+                       ale->update &= ~ANIM_UPDATE_ORDER;
+                       sort_time_fcurve(fcu);
+               }
+
+               if (ale->update & ANIM_UPDATE_HANDLES) {
+                       ale->update &= ~ANIM_UPDATE_HANDLES;
+                       calchandles_fcurve(fcu);
+               }
+
+               if (ale->update & ANIM_UPDATE_DEPS) {
+                       ale->update &= ~ANIM_UPDATE_DEPS;
+                       ANIM_list_elem_update(ac->scene, ale);
+               }
+
+               BLI_assert(ale->update == 0);
+       }
+}
+
+void ANIM_animdata_freelist(ListBase *anim_data)
+{
+#ifndef NDEBUG
+       bAnimListElem *ale, *ale_next;
+       for (ale = anim_data->first; ale; ale = ale_next) {
+               ale_next = ale->next;
+               BLI_assert(ale->update == 0);
+               MEM_freeN(ale);
+       }
+       BLI_listbase_clear(anim_data);
+#else
+       BLI_freelistN(anim_data);
+#endif
 }
index e233608dea2992c0d4dc32849c78de5ad8d0f7bb..c5e54cc1c7c2959526695e53ba9aa05f0a34f1ca 100644 (file)
@@ -798,7 +798,7 @@ void summary_to_keylist(bAnimContext *ac, DLRBT_Tree *keys, DLRBT_Tree *blocks)
                        }
                }
                
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
 }
 
@@ -832,7 +832,7 @@ void scene_to_keylist(bDopeSheet *ads, Scene *sce, DLRBT_Tree *keys, DLRBT_Tree
        for (ale = anim_data.first; ale; ale = ale->next)
                fcurve_to_keylist(ale->adt, ale->data, keys, blocks);
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 void ob_to_keylist(bDopeSheet *ads, Object *ob, DLRBT_Tree *keys, DLRBT_Tree *blocks)
@@ -868,7 +868,7 @@ void ob_to_keylist(bDopeSheet *ads, Object *ob, DLRBT_Tree *keys, DLRBT_Tree *bl
        for (ale = anim_data.first; ale; ale = ale->next)
                fcurve_to_keylist(ale->adt, ale->data, keys, blocks);
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 void fcurve_to_keylist(AnimData *adt, FCurve *fcu, DLRBT_Tree *keys, DLRBT_Tree *blocks)
index e43da7587cf0793cafafac349f9e70653434c443..ee5039488bd3c07d5326b77f996e8c9d2170e63f 100644 (file)
@@ -223,7 +223,7 @@ static short ob_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, Object *o
                }
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* return return code - defaults to zero if nothing happened */
        return ret;
@@ -265,7 +265,7 @@ static short scene_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, Scene
                }
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* return return code - defaults to zero if nothing happened */
        return ret;
@@ -301,7 +301,7 @@ static short summary_keyframes_loop(KeyframeEditData *ked, bAnimContext *ac, Key
                        break;
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        return ret_code;
 }
@@ -397,7 +397,7 @@ void ANIM_editkeyframes_refresh(bAnimContext *ac)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ************************************************************************** */
index c610595c4ba3ff2900d2c6c6956188383150fb4d..07a1a7e6b3016848999617bb6066087d2fac8fa0 100644 (file)
@@ -857,6 +857,8 @@ short paste_animedit_keys(bAnimContext *ac, ListBase *anim_data,
                                        totmatch++;
                                        paste_animedit_keys_fcurve(fcu, aci, offset, merge_mode);
                                }
+
+                               ale->update |= ANIM_UPDATE_DEFAULT;
                        }
                        
                        /* don't continue if some fcurves were pasted */
@@ -865,6 +867,8 @@ short paste_animedit_keys(bAnimContext *ac, ListBase *anim_data,
                }
        }
        
+       ANIM_animdata_update(ac, anim_data);
+
        return 0;
 }
 
index 10f3f1bef4c692b37dda3eb21e229d0a6ea536fa..a712a0d7c45abdda0f29cfa25a6dbadcfa4dfdf6 100644 (file)
@@ -115,6 +115,7 @@ typedef struct bAnimListElem {
        int     flag;           /* copy of elem's flags for quick access */
        int     index;          /* for un-named data, the index of the data in it's collection */
        
+       short   update;         /* tag the element for updating (eAnim_Update_Flags) */
        short   datatype;       /* type of motion data to expect */
        void   *key_data;       /* motion data - mostly F-Curves, but can be other types too */
        
@@ -123,6 +124,15 @@ typedef struct bAnimListElem {
        struct AnimData *adt;   /* source of the animation data attached to ID block (for convenience) */
 } bAnimListElem;
 
+typedef enum eAnim_Update_Flags {
+       ANIM_UPDATE_DEPS        = (1 << 0),  /* referenced data and dependencies get refreshed */
+       ANIM_UPDATE_ORDER       = (1 << 1),  /* keyframes need to be sorted */
+       ANIM_UPDATE_HANDLES     = (1 << 2),  /* recalculate handles */
+} eAnim_Update_Flags;
+
+/* used for most tools which change keyframes (flushed by ANIM_animdata_update) */
+#define ANIM_UPDATE_DEFAULT (ANIM_UPDATE_DEPS | ANIM_UPDATE_ORDER | ANIM_UPDATE_HANDLES)
+#define ANIM_UPDATE_DEFAULT_NOHANDLES (ANIM_UPDATE_DEFAULT & ~ANIM_UPDATE_HANDLES)
 
 /* Some types for easier type-testing 
  * NOTE: need to keep the order of these synchronized with the channels define code
@@ -356,6 +366,11 @@ bool ANIM_animdata_get_context(const struct bContext *C, bAnimContext *ac);
  */
 bool ANIM_animdata_context_getdata(bAnimContext *ac);
 
+/* Acts on bAnimListElem eAnim_Update_Flags */
+void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data);
+
+void ANIM_animdata_freelist(ListBase *anim_data);
+
 /* ************************************************ */
 /* ANIMATION CHANNELS LIST */
 /* anim_channels_*.c */
index f15bbe0d2f1184722541a79b712c46b1e2eff672..b2e5508557945f52c555b133e101e9750c31f4b3 100644 (file)
@@ -139,7 +139,7 @@ void draw_channel_names(bContext *C, bAnimContext *ac, ARegion *ar)
        }
        
        /* free tempolary channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ************************************************************************* */
@@ -346,7 +346,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
        }
        
        /* free tempolary channels used for drawing */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 
        /* black line marking 'current frame' for Time-Slide transform mode */
        if (saction->flag & SACTION_MOVING) {
index 92e727fc2d7867db7d7a4a866b49318d24f8c955..3bc3c7f7b73f1b24d4c7ffdfbb9c4531ca229735 100644 (file)
@@ -299,7 +299,7 @@ static bool get_keyframe_extents(bAnimContext *ac, float *min, float *max, const
                }
                
                /* free memory */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        else {
                /* set default range */
@@ -410,7 +410,7 @@ static bool actkeys_channels_get_selected_extents(bAnimContext *ac, float *min,
        }
        
        /* free all temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        return (found != 0);
 }
@@ -536,7 +536,7 @@ static short copy_action_keys(bAnimContext *ac)
        ok = copy_animedit_keys(ac, &anim_data);
        
        /* clean up */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 
        return ok;
 }
@@ -561,9 +561,9 @@ static short paste_action_keys(bAnimContext *ac,
        
        /* paste keyframes */
        ok = paste_animedit_keys(ac, &anim_data, offset_mode, merge_mode);
-       
+
        /* clean up */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 
        return ok;
 }
@@ -640,10 +640,7 @@ static int actkeys_paste_exec(bContext *C, wmOperator *op)
                        return OPERATOR_CANCELLED;
                }
        }
-       
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
+
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -718,9 +715,12 @@ static void insert_action_keys(bAnimContext *ac, short mode)
                        insert_keyframe(reports, ale->id, NULL, ((fcu->grp) ? (fcu->grp->name) : (NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
                else
                        insert_vert_fcurve(fcu, cfra, fcu->curval, 0);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -741,10 +741,7 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op)
        
        /* insert keyframes */
        insert_action_keys(&ac, mode);
-       
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
+
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_ADDED, NULL);
        
@@ -795,10 +792,12 @@ static void duplicate_action_keys(bAnimContext *ac)
                        ED_masklayer_frames_duplicate((MaskLayer *)ale->data);
                else
                        BLI_assert(0);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       /* free filtered list */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -813,11 +812,7 @@ static int actkeys_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
                
        /* duplicate keyframes */
        duplicate_action_keys(&ac);
-       
-       /* validate keyframes after editing */
-       if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK))
-               ANIM_editkeyframes_refresh(&ac);
-       
+
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_ADDED, NULL);
        
@@ -854,40 +849,47 @@ static bool delete_action_keys(bAnimContext *ac)
        ListBase anim_data = {NULL, NULL};
        bAnimListElem *ale;
        int filter;
-       bool changed = false;
-       
+       bool changed_final = false;
+
        /* filter data */
        if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK))
                filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
        else
                filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS);
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-       
+
        /* loop through filtered data and delete selected keys */
        for (ale = anim_data.first; ale; ale = ale->next) {
+               bool changed = false;
+
                if (ale->type == ANIMTYPE_GPLAYER) {
-                       changed |= ED_gplayer_frames_delete((bGPDlayer *)ale->data);
+                       changed = ED_gplayer_frames_delete((bGPDlayer *)ale->data);
                }
                else if (ale->type == ANIMTYPE_MASKLAYER) {
-                       changed |= ED_masklayer_frames_delete((MaskLayer *)ale->data);
+                       changed = ED_masklayer_frames_delete((MaskLayer *)ale->data);
                }
                else {
                        FCurve *fcu = (FCurve *)ale->key_data;
                        AnimData *adt = ale->adt;
                        
                        /* delete selected keyframes only */
-                       changed |= delete_fcurve_keys(fcu);
+                       changed = delete_fcurve_keys(fcu);
                        
                        /* Only delete curve too if it won't be doing anything anymore */
                        if ((fcu->totvert == 0) && (list_has_suitable_fmodifier(&fcu->modifiers, 0, FMI_TYPE_GENERATE_CURVE) == 0))
                                ANIM_fcurve_delete_from_animdata(ac, adt, fcu);
                }
+
+               if (changed) {
+                       ale->update |= ANIM_UPDATE_DEFAULT;
+                       changed_final = true;
+               }
        }
-       
-       /* free filtered list */
-       BLI_freelistN(&anim_data);
 
-       return changed;
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
+
+       return changed_final;
 }
 
 /* ------------------- */
@@ -904,10 +906,6 @@ static int actkeys_delete_exec(bContext *C, wmOperator *UNUSED(op))
        if (!delete_action_keys(&ac))
                return OPERATOR_CANCELLED;
        
-       /* validate keyframes after editing */
-       if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK))
-               ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_REMOVED, NULL);
        
@@ -943,11 +941,14 @@ static void clean_action_keys(bAnimContext *ac, float thresh)
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
        
        /* loop through filtered data and clean curves */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                clean_fcurve((FCurve *)ale->key_data, thresh);
-       
-       /* free temp data */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -969,9 +970,6 @@ static int actkeys_clean_exec(bContext *C, wmOperator *op)
        /* clean keyframes */
        clean_action_keys(&ac, thresh);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -1011,11 +1009,14 @@ static void sample_action_keys(bAnimContext *ac)
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
        
        /* loop through filtered data and add keys between selected keyframes on every frame  */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                sample_fcurve((FCurve *)ale->key_data);
-       
-       /* admin and redraws */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEPS;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1033,9 +1034,6 @@ static int actkeys_sample_exec(bContext *C, wmOperator *UNUSED(op))
        /* sample keyframes */
        sample_action_keys(&ac);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -1118,10 +1116,12 @@ static void setexpo_action_keys(bAnimContext *ac, short mode)
                                }
                        }
                }
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1143,9 +1143,6 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op)
        /* set handle type */
        setexpo_action_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1188,11 +1185,14 @@ static void setipo_action_keys(bAnimContext *ac, short mode)
        /* loop through setting BezTriple interpolation
         * Note: we do not supply KeyframeEditData to the looper yet. Currently that's not necessary here...
         */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                ANIM_fcurve_keyframes_loop(NULL, ale->key_data, NULL, set_cb, calchandles_fcurve);
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1214,9 +1214,6 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op)
        /* set handle type */
        setipo_action_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1268,11 +1265,13 @@ static void sethandles_action_keys(bAnimContext *ac, short mode)
                if (ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, sel_cb, NULL)) {
                        /* change type of selected handles */
                        ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, edit_cb, calchandles_fcurve);
+
+                       ale->update |= ANIM_UPDATE_DEFAULT;
                }
        }
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1294,9 +1293,6 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op)
        /* set handle type */
        sethandles_action_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1339,11 +1335,14 @@ static void setkeytype_action_keys(bAnimContext *ac, short mode)
        /* loop through setting BezTriple interpolation
         * Note: we do not supply KeyframeEditData to the looper yet. Currently that's not necessary here...
         */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                ANIM_fcurve_keyframes_loop(NULL, ale->key_data, NULL, set_cb, NULL);
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEPS | ANIM_UPDATE_HANDLES;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1365,9 +1364,6 @@ static int actkeys_keytype_exec(bContext *C, wmOperator *op)
        /* set handle type */
        setkeytype_action_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1436,7 +1432,7 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op))
                        ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, bezt_calc_average, NULL);
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set the new current frame value, based on the average time */
        if (ked.i1) {
@@ -1525,9 +1521,12 @@ static void snap_action_keys(bAnimContext *ac, short mode)
                else {
                        ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, edit_cb, calchandles_fcurve);
                }
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1547,10 +1546,6 @@ static int actkeys_snap_exec(bContext *C, wmOperator *op)
        /* snap keyframes */
        snap_action_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK))
-               ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -1635,9 +1630,12 @@ static void mirror_action_keys(bAnimContext *ac, short mode)
                //      snap_gplayer_frames(ale->data, mode);
                else 
                        ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, edit_cb, calchandles_fcurve);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1661,9 +1659,6 @@ static int actkeys_mirror_exec(bContext *C, wmOperator *op)
        /* mirror keyframes */
        mirror_action_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
index 1e89b3042793725e2b26b5d004ecc4e706b9e0d7..cf18cffefb6c828da226907ff9f3852eb1b71b7f 100644 (file)
@@ -142,7 +142,7 @@ static void deselect_action_keys(bAnimContext *ac, short test, short sel)
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -294,7 +294,7 @@ static void borderselect_action(bAnimContext *ac, const rcti rect, short mode, s
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -442,7 +442,7 @@ static void markers_selectkeys_between(bAnimContext *ac)
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 
@@ -477,7 +477,7 @@ static void columnselect_action_keys(bAnimContext *ac, short mode)
                                for (ale = anim_data.first; ale; ale = ale->next)
                                        ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, bezt_to_cfraelem, NULL);
                        }
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                        break;
                        
                case ACTKEYS_COLUMNSEL_CFRA: /* current frame */
@@ -534,7 +534,7 @@ static void columnselect_action_keys(bAnimContext *ac, short mode)
        
        /* free elements */
        BLI_freelistN(&ked.list);
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -612,7 +612,7 @@ static int actkeys_select_linked_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that keyframe selection has changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
@@ -675,7 +675,7 @@ static void select_moreless_action_keys(bAnimContext *ac, short mode)
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ----------------- */
@@ -838,7 +838,7 @@ static void actkeys_select_leftright(bAnimContext *ac, short leftright, short se
        }
 
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ----------------- */
@@ -975,7 +975,7 @@ static void actkeys_mselect_single(bAnimContext *ac, bAnimListElem *ale, short s
                                }
                        }
                        
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                }
                else {
                        ANIM_animchannel_keyframes_loop(&ked, ac->ads, ale, ok_cb, select_cb, NULL);
@@ -1029,7 +1029,7 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se
        
        /* free elements */
        BLI_freelistN(&ked.list);
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* option 4) select all keyframes in same channel */
@@ -1066,7 +1066,7 @@ static void actkeys_mselect_channel_only(bAnimContext *ac, bAnimListElem *ale, s
                                }
                        }
                        
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                }
                else {
                        ANIM_animchannel_keyframes_loop(NULL, ac->ads, ale, NULL, select_cb, NULL);
@@ -1112,7 +1112,7 @@ static void mouse_action_keys(bAnimContext *ac, const int mval[2], short select_
        if (ale == NULL) {
                /* channel not found */
                printf("Error: animation channel (index = %d) not found in mouse_action_keys()\n", channel_index);
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return;
        }
        else {
@@ -1195,7 +1195,7 @@ static void mouse_action_keys(bAnimContext *ac, const int mval[2], short select_
                BLI_dlrbTree_free(&anim_keys);
                
                /* free list of channels, since it's not used anymore */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        
        /* for replacing selection, firstly need to clear existing selection */
index 83f87ebc1741bfa646a31f37103b3dc2a300ec0f..793a92d4decf8ea802e99a4223ad80e0215a0ef2 100644 (file)
@@ -1054,7 +1054,7 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
        }
        
        /* free list of curves */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ************************************************************************* */
@@ -1139,5 +1139,5 @@ void graph_draw_channel_names(bContext *C, bAnimContext *ac, ARegion *ar)
        }
        
        /* free tempolary channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
index 3d9b23d8a83b1dec3920d7ca69a29a9ada85bf3b..f8bc5e9862d1b9a993ec49762a72764b395910e3 100644 (file)
@@ -151,7 +151,7 @@ void get_graph_keyframe_extents(bAnimContext *ac, float *xmin, float *xmax, floa
                }
                
                /* free memory */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        else {
                /* set default range */
@@ -369,7 +369,7 @@ static void create_ghost_curves(bAnimContext *ac, int start, int end)
        }
        
        /* admin and redraws */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -505,9 +505,12 @@ static void insert_graph_keys(bAnimContext *ac, short mode)
                        insert_keyframe(reports, ale->id, NULL, ((fcu->grp) ? (fcu->grp->name) : (NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
                else
                        insert_vert_fcurve(fcu, cfra, fcu->curval, 0);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -527,9 +530,6 @@ static int graphkeys_insertkey_exec(bContext *C, wmOperator *op)
        /* insert keyframes */
        insert_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_ADDED, NULL);
        
@@ -581,6 +581,8 @@ static int graphkeys_click_insert_exec(bContext *C, wmOperator *op)
         * keyframes if these will be visible after doing so...
         */
        if (fcurve_is_keyframable(fcu)) {
+               ListBase anim_data;
+
                short mapping_flag = ANIM_get_normalization_flags(&ac);
 
                /* get frame and value from props */
@@ -596,6 +598,13 @@ static int graphkeys_click_insert_exec(bContext *C, wmOperator *op)
                
                /* insert keyframe on the specified frame + value */
                insert_vert_fcurve(fcu, frame, val, 0);
+
+               ale->update |= ANIM_UPDATE_DEPS;
+
+               BLI_listbase_clear(&anim_data);
+               BLI_addtail(&anim_data, ale);
+
+               ANIM_animdata_update(&ac, &anim_data);
        }
        else {
                /* warn about why this can't happen */
@@ -684,7 +693,7 @@ static short copy_graph_keys(bAnimContext *ac)
        ok = copy_animedit_keys(ac, &anim_data);
        
        /* clean up */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 
        return ok;
 }
@@ -708,9 +717,9 @@ static short paste_graph_keys(bAnimContext *ac,
        
        /* paste keyframes */
        ok = paste_animedit_keys(ac, &anim_data, offset_mode, merge_mode);
-       
+
        /* clean up */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 
        return ok;
 }
@@ -771,9 +780,6 @@ static int graphkeys_paste_exec(bContext *C, wmOperator *op)
                return OPERATOR_CANCELLED;
        }
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -815,10 +821,12 @@ static void duplicate_graph_keys(bAnimContext *ac)
        /* loop through filtered data and delete selected keys */
        for (ale = anim_data.first; ale; ale = ale->next) {
                duplicate_fcurve_keys((FCurve *)ale->key_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       /* free filtered list */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -834,9 +842,6 @@ static int graphkeys_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
        /* duplicate keyframes */
        duplicate_graph_keys(&ac);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_ADDED, NULL);
        
@@ -876,7 +881,7 @@ static bool delete_graph_keys(bAnimContext *ac)
        ListBase anim_data = {NULL, NULL};
        bAnimListElem *ale;
        int filter;
-       bool changed = false;
+       bool changed_final = false;
        
        /* filter data */
        filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
@@ -886,9 +891,15 @@ static bool delete_graph_keys(bAnimContext *ac)
        for (ale = anim_data.first; ale; ale = ale->next) {
                FCurve *fcu = (FCurve *)ale->key_data;
                AnimData *adt = ale->adt;
+               bool changed;
                
                /* delete selected keyframes only */
-               changed |= delete_fcurve_keys(fcu);
+               changed = delete_fcurve_keys(fcu);
+
+               if (changed) {
+                       ale->update |= ANIM_UPDATE_DEFAULT;
+                       changed_final = true;
+               }
                
                /* Only delete curve too if it won't be doing anything anymore */
                if ((fcu->totvert == 0) &&
@@ -898,11 +909,11 @@ static bool delete_graph_keys(bAnimContext *ac)
                        ANIM_fcurve_delete_from_animdata(ac, adt, fcu);
                }
        }
-       
-       /* free filtered list */
-       BLI_freelistN(&anim_data);
 
-       return changed;
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
+
+       return changed_final;
 }
 
 /* ------------------- */
@@ -919,9 +930,6 @@ static int graphkeys_delete_exec(bContext *C, wmOperator *UNUSED(op))
        if (!delete_graph_keys(&ac))
                return OPERATOR_CANCELLED;
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_REMOVED, NULL);
        
@@ -957,11 +965,14 @@ static void clean_graph_keys(bAnimContext *ac, float thresh)
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
        
        /* loop through filtered data and clean curves */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                clean_fcurve((FCurve *)ale->key_data, thresh);
-       
-       /* free temp data */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -981,9 +992,6 @@ static int graphkeys_clean_exec(bContext *C, wmOperator *op)
        /* clean keyframes */
        clean_graph_keys(&ac, thresh);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -1036,10 +1044,12 @@ static void bake_graph_curves(bAnimContext *ac, int start, int end)
                
                /* restore driver */
                fcu->driver = driver;
+
+               ale->update |= ANIM_UPDATE_DEPS;
        }
-       
-       /* admin and redraws */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1063,9 +1073,6 @@ static int graphkeys_bake_exec(bContext *C, wmOperator *UNUSED(op))
        /* bake keyframes */
        bake_graph_curves(&ac, start, end);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        // NOTE: some distinction between order/number of keyframes and type should be made?
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
@@ -1178,16 +1185,16 @@ static int graphkeys_sound_bake_exec(bContext *C, wmOperator *op)
                
                /* sample the sound */
                fcurve_store_samples(fcu, &sbi, start, end, fcurve_samplingcb_sound);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
 
        /* free sample data */
        free(sbi.samples);
 
-       /* admin and redraws */
-       BLI_freelistN(&anim_data);
-
        /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
+       ANIM_animdata_update(&ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 
        /* set notifier that 'keyframes' have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
@@ -1275,11 +1282,14 @@ static void sample_graph_keys(bAnimContext *ac)
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
        
        /* loop through filtered data and add keys between selected keyframes on every frame  */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                sample_fcurve((FCurve *)ale->key_data);
-       
-       /* admin and redraws */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEPS;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1295,9 +1305,6 @@ static int graphkeys_sample_exec(bContext *C, wmOperator *UNUSED(op))
        /* sample keyframes */
        sample_graph_keys(&ac);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -1381,10 +1388,12 @@ static void setexpo_graph_keys(bAnimContext *ac, short mode)
                                }
                        }
                }
+
+               ale->update |= ANIM_UPDATE_DEPS;
        }
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1404,9 +1413,6 @@ static int graphkeys_expo_exec(bContext *C, wmOperator *op)
        /* set handle type */
        setexpo_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1449,11 +1455,14 @@ static void setipo_graph_keys(bAnimContext *ac, short mode)
        /* loop through setting BezTriple interpolation
         * Note: we do not supply KeyframeEditData to the looper yet. Currently that's not necessary here...
         */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                ANIM_fcurve_keyframes_loop(NULL, ale->key_data, NULL, set_cb, calchandles_fcurve);
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT_NOHANDLES;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -1473,9 +1482,6 @@ static int graphkeys_ipo_exec(bContext *C, wmOperator *op)
        /* set handle type */
        setipo_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1517,11 +1523,14 @@ static void seteasing_graph_keys(bAnimContext *ac, short mode)
        /* loop through setting BezTriple easing
         * Note: we do not supply KeyframeEditData to the looper yet. Currently that's not necessary here...
         */
-       for (ale = anim_data.first; ale; ale = ale->next)
+       for (ale = anim_data.first; ale; ale = ale->next) {
                ANIM_fcurve_keyframes_loop(NULL, ale->key_data, NULL, set_cb, calchandles_fcurve);
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT_NOHANDLES;
+       }
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 static int graphkeys_easing_exec(bContext *C, wmOperator *op)
@@ -1539,9 +1548,6 @@ static int graphkeys_easing_exec(bContext *C, wmOperator *op)
        /* set handle type */
        seteasing_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1593,11 +1599,13 @@ static void sethandles_graph_keys(bAnimContext *ac, short mode)
                if (ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, sel_cb, NULL)) {
                        /* change type of selected handles */
                        ANIM_fcurve_keyframes_loop(NULL, fcu, NULL, edit_cb, calchandles_fcurve);
+
+                       ale->update |= ANIM_UPDATE_DEFAULT;
                }
        }
-       
-       /* cleanup */
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 /* ------------------- */
 
@@ -1616,9 +1624,6 @@ static int graphkeys_handletype_exec(bContext *C, wmOperator *op)
        /* set handle type */
        sethandles_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframe properties have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL);
        
@@ -1724,10 +1729,12 @@ static int graphkeys_euler_filter_exec(bContext *C, wmOperator *op)
                        euf->rna_path = fcu->rna_path; /* this should be safe, since we're only using it for a short time */
                        euf->fcurves[fcu->array_index] = fcu;
                }
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       BLI_freelistN(&anim_data);
-       
+
        if (groups == 0) {
+               ANIM_animdata_freelist(&anim_data);
                BKE_report(op->reports, RPT_WARNING, "No Euler Rotation F-Curves to fix up");
                return OPERATOR_CANCELLED;
        }
@@ -1786,6 +1793,9 @@ static int graphkeys_euler_filter_exec(bContext *C, wmOperator *op)
        }
        BLI_freelistN(&eulers);
        
+       ANIM_animdata_update(&ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
+
        /* updates + finishing warnings */
        if (failed == groups) {
                BKE_report(op->reports, RPT_ERROR, 
@@ -1801,9 +1811,6 @@ static int graphkeys_euler_filter_exec(bContext *C, wmOperator *op)
                                   "consecutive XYZ order and selected");
                }
                
-               /* validate keyframes after editing */
-               ANIM_editkeyframes_refresh(&ac);
-               
                /* set notifier that keyframes have changed */
                WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
                
@@ -1882,7 +1889,7 @@ static int graphkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op))
                ked.i2 += current_ked.i2;
        }
        
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set the new current frame and cursor values, based on the average time and value */
        if (ked.i1) {
@@ -1984,9 +1991,12 @@ static void snap_graph_keys(bAnimContext *ac, short mode)
                }
                else 
                        ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, edit_cb, calchandles_fcurve);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -2006,9 +2016,6 @@ static int graphkeys_snap_exec(bContext *C, wmOperator *op)
        /* snap keyframes */
        snap_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -2111,9 +2118,12 @@ static void mirror_graph_keys(bAnimContext *ac, short mode)
                }
                else 
                        ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, edit_cb, calchandles_fcurve);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       
-       BLI_freelistN(&anim_data);
+
+       ANIM_animdata_update(ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -2133,9 +2143,6 @@ static int graphkeys_mirror_exec(bContext *C, wmOperator *op)
        /* mirror keyframes */
        mirror_graph_keys(&ac, mode);
        
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
-       
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
        
@@ -2185,11 +2192,12 @@ static int graphkeys_smooth_exec(bContext *C, wmOperator *UNUSED(op))
                 * Snap->Flatten Handles anyway.
                 */
                smooth_fcurve(ale->key_data);
+
+               ale->update |= ANIM_UPDATE_DEFAULT;
        }
-       BLI_freelistN(&anim_data);
-       
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
+
+       ANIM_animdata_update(&ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that keyframes have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
@@ -2283,11 +2291,12 @@ static int graph_fmodifier_add_exec(bContext *C, wmOperator *op)
                        BKE_report(op->reports, RPT_ERROR, "Modifier could not be added (see console for details)");
                        break;
                }
+
+               ale->update |= ANIM_UPDATE_DEPS;
        }
-       BLI_freelistN(&anim_data);
-       
-       /* validate keyframes after editing */
-       ANIM_editkeyframes_refresh(&ac);
+
+       ANIM_animdata_update(&ac, &anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        // FIXME: this really isn't the best description for it...
@@ -2397,19 +2406,26 @@ static int graph_fmodifier_paste_exec(bContext *C, wmOperator *op)
        /* paste modifiers */
        for (ale = anim_data.first; ale; ale = ale->next) {
                FCurve *fcu = (FCurve *)ale->data;
+               int tot;
 
                /* TODO: do we want to replace existing modifiers? add user pref for that! */
-               ok += ANIM_fmodifiers_paste_from_buf(&fcu->modifiers, 0);
+               tot = ANIM_fmodifiers_paste_from_buf(&fcu->modifiers, 0);
+
+               if (tot) {
+                       ale->update |= ANIM_UPDATE_DEPS;
+               }
+
+               ok += tot;
        }
-       
-       /* clean up */
-       BLI_freelistN(&anim_data);
+
+       if (ok) {
+               ANIM_animdata_update(&ac, &anim_data);
+       }
+       ANIM_animdata_freelist(&anim_data);
        
        /* successful or not? */
        if (ok) {
-               /* validate keyframes after editing */
-               ANIM_editkeyframes_refresh(&ac);
-               
+
                /* set notifier that keyframes have changed */
                WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
                
index 82eddfbe4a936179b2bb1923edb826bf56339529..378139accbcddb81281039e17196e00f3b0f7024 100644 (file)
@@ -141,7 +141,7 @@ static void deselect_graph_keys(bAnimContext *ac, short test, short sel, short d
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -311,7 +311,7 @@ static void borderselect_graphkeys(
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -548,7 +548,7 @@ static void markers_selectkeys_between(bAnimContext *ac)
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 
@@ -576,7 +576,7 @@ static void columnselect_graph_keys(bAnimContext *ac, short mode)
                        for (ale = anim_data.first; ale; ale = ale->next)
                                ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, bezt_to_cfraelem, NULL);
                        
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                        break;
                        
                case GRAPHKEYS_COLUMNSEL_CFRA: /* current frame */
@@ -622,7 +622,7 @@ static void columnselect_graph_keys(bAnimContext *ac, short mode)
        
        /* free elements */
        BLI_freelistN(&ked.list);
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -700,7 +700,7 @@ static int graphkeys_select_linked_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that keyframe selection has changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_SELECTED, NULL);
@@ -764,7 +764,7 @@ static void select_moreless_graph_keys(bAnimContext *ac, short mode)
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ----------------- */
@@ -899,7 +899,7 @@ static void graphkeys_select_leftright(bAnimContext *ac, short leftright, short
        }
 
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ----------------- */
@@ -1147,7 +1147,7 @@ static void get_nearest_fcurve_verts_list(bAnimContext *ac, const int mval[2], L
        }
        
        /* free channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* helper for find_nearest_fcurve_vert() - get the best match to use */
@@ -1400,7 +1400,7 @@ static void graphkeys_mselect_column(bAnimContext *ac, const int mval[2], short
        /* free elements */
        MEM_freeN(nvi);
        BLI_freelistN(&ked.list);
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
  
 /* ------------------- */
index 07a582f75564c070c03237a789d2b987eafc73b9..e9c8ae95acdc3588324c14c76dcf2a9786f18d8a 100644 (file)
@@ -78,7 +78,7 @@ bAnimListElem *get_active_fcurve_channel(bAnimContext *ac)
                
                /* remove first item from list, then free the rest of the list and return the stored one */
                BLI_remlink(&anim_data, ale);
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                
                return ale;
        }
@@ -135,7 +135,7 @@ int graphop_visible_keyframes_poll(bContext *C)
        }
        
        /* cleanup and return findings */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        return found;
 }
 
@@ -185,7 +185,7 @@ int graphop_editable_keyframes_poll(bContext *C)
        }
        
        /* cleanup and return findings */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        return found;
 }
 
@@ -251,7 +251,7 @@ int graphop_selected_fcurve_poll(bContext *C)
                return 0;
        
        /* cleanup and return findings */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        return 1;
 }
 
index bfc1bcbcba0c2ef56997142d20f61e2d73032a4a..6dba706b241d756c2d091ae85faeb1e46848f60e 100644 (file)
@@ -607,7 +607,7 @@ static void graph_refresh(const bContext *C, ScrArea *sa)
                }
                
                /* free temp list */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
 }
 
index 808bd622c0d81eab8a5c1bcce9bd9df3c2d45d22..1090106d79f0e8d61a7a3a9cf4fa0e8ee85a3da0 100644 (file)
@@ -174,7 +174,7 @@ bool nla_panel_context(const bContext *C, PointerRNA *adt_ptr, PointerRNA *nlt_p
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        return (found != 0);
 }
index 3c8518cdb2802240f19c5a3c701f01c822e54ef7..3a956c8e062f9ec1d958a280eecec7ca7fe32179 100644 (file)
@@ -94,7 +94,7 @@ static int mouse_nla_channels(bAnimContext *ac, float x, int channel_index, shor
                if (G.debug & G_DEBUG)
                        printf("Error: animation channel (index = %d) not found in mouse_anim_channels()\n", channel_index);
                
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return 0;
        }
        
@@ -322,7 +322,7 @@ static int mouse_nla_channels(bAnimContext *ac, float x, int channel_index, shor
        }
        
        /* free channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* return the notifier-flags set */
        return notifierFlags;
@@ -438,12 +438,12 @@ static int nlachannels_pushdown_exec(bContext *C, wmOperator *op)
                ale = BLI_findlink(&anim_data, channel_index);
                if (ale == NULL) {
                        BKE_reportf(op->reports, RPT_ERROR, "No animation channel found at index %d", channel_index);
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                        return OPERATOR_CANCELLED;
                }
                else if (ale->type != ANIMTYPE_NLAACTION) {
                        BKE_reportf(op->reports, RPT_ERROR, "Animation channel at index %d is not a NLA 'Active Action' channel", channel_index);
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                        return OPERATOR_CANCELLED;
                }
                
@@ -451,7 +451,7 @@ static int nlachannels_pushdown_exec(bContext *C, wmOperator *op)
                adt = ale->adt;
                
                /* we don't need anything here anymore, so free it all */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        
        /* double-check that we are free to push down here... */
@@ -539,7 +539,7 @@ bool nlaedit_add_tracks_existing(bAnimContext *ac, bool above_sel)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        return added;
 }
@@ -572,7 +572,7 @@ bool nlaedit_add_tracks_empty(bAnimContext *ac)
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        return added;
 }
@@ -666,7 +666,7 @@ static int nlaedit_delete_tracks_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
index 943112624cde28e525d4d134175ca0c1e38dc1e5..ac8dca6e83af8129edf053a82e7cca3b53bb981e 100644 (file)
@@ -613,7 +613,7 @@ void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *ar)
        }
        
        /* free tempolary channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* *********************************************** */
@@ -704,7 +704,7 @@ void draw_nla_channel_list(bContext *C, bAnimContext *ac, ARegion *ar)
        }
        
        /* free temporary channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* *********************************************** */
index 93d0f7527ef5d778cd34e96dca84a05705843f85..11674805a3e2ae61b07a55c5771065911af1db38 100644 (file)
@@ -93,7 +93,7 @@ void ED_nla_postop_refresh(bAnimContext *ac)
        }
        
        /* free temp memory */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* *********************************************** */
@@ -136,7 +136,7 @@ static int nlaedit_enable_tweakmode_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* if we managed to enter tweakmode on at least one AnimData block, 
         * set the flag for this in the active scene and send notifiers
@@ -200,7 +200,7 @@ bool nlaedit_disable_tweakmode(bAnimContext *ac)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* if we managed to enter tweakmode on at least one AnimData block, 
         * set the flag for this in the active scene and send notifiers
@@ -293,7 +293,7 @@ static void get_nlastrip_extents(bAnimContext *ac, float *min, float *max, const
                }
                
                /* free memory */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        
        /* set default range if nothing happened */
@@ -406,7 +406,7 @@ static bool nla_channels_get_selected_extents(bAnimContext *ac, float *min, floa
        }
        
        /* free all temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        return (found != 0);
 }
@@ -602,7 +602,7 @@ static int nlaedit_add_actionclip_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -723,7 +723,7 @@ static int nlaedit_add_transition_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* was anything added? */
        if (done) {
@@ -815,7 +815,7 @@ static int nlaedit_add_sound_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -880,7 +880,7 @@ static int nlaedit_add_meta_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -932,7 +932,7 @@ static int nlaedit_remove_meta_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -1019,7 +1019,7 @@ static int nlaedit_duplicate_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        if (done) {
                /* refresh auto strip properties */
@@ -1111,7 +1111,7 @@ static int nlaedit_delete_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -1256,7 +1256,7 @@ static int nlaedit_split_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -1309,7 +1309,7 @@ static int nlaedit_bake_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -1375,7 +1375,7 @@ static int nlaedit_toggle_mute_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -1529,7 +1529,7 @@ static int nlaedit_swap_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -1603,7 +1603,7 @@ static int nlaedit_move_up_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -1677,7 +1677,7 @@ static int nlaedit_move_down_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -1756,7 +1756,7 @@ static int nlaedit_sync_actlen_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -1832,7 +1832,7 @@ static int nlaedit_make_single_user_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -1928,7 +1928,7 @@ static int nlaedit_apply_scale_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -1988,7 +1988,7 @@ static int nlaedit_clear_scale_exec(bContext *C, wmOperator *UNUSED(op))
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -2129,7 +2129,7 @@ static int nlaedit_snap_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* refresh auto strip properties */
        ED_nla_postop_refresh(&ac);
@@ -2252,7 +2252,7 @@ static int nla_fmodifier_add_exec(bContext *C, wmOperator *op)
        }
        
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* set notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -2375,7 +2375,7 @@ static int nla_fmodifier_paste_exec(bContext *C, wmOperator *op)
        }
        
        /* clean up */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
        
        /* successful or not? */
        if (ok) {
index 3e7a6f4578cb88763e3540ba0e64e305476f121a..0d26f374dd0ed5f256688891b8c177fcf9538ef8 100644 (file)
@@ -153,7 +153,7 @@ static void deselect_nla_strips(bAnimContext *ac, short test, short sel)
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -268,7 +268,7 @@ static void borderselect_nla_strips(bAnimContext *ac, rcti rect, short mode, sho
        }
        
        /* cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -412,7 +412,7 @@ static void nlaedit_select_leftright(bContext *C, bAnimContext *ac, short leftri
        }
        
        /* Cleanup */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ------------------- */
@@ -537,7 +537,7 @@ static void mouse_nla_strips(bContext *C, bAnimContext *ac, const int mval[2], s
        if (ale == NULL) {
                /* channel not found */
                printf("Error: animation channel (index = %d) not found in mouse_nla_strips()\n", channel_index);
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return;
        }
        else {
@@ -556,7 +556,7 @@ static void mouse_nla_strips(bContext *C, bAnimContext *ac, const int mval[2], s
                BLI_remlink(&anim_data, ale);
                
                /* free list of channels, since it's not used anymore */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
        
        /* if currently in tweakmode, exit tweakmode before changing selection states
index 949ee79a3dc4e9bf8200e92dde69e65d0a8b5a10..7f6ea9b7982afd7df549a07408f13df6f1465ec3 100644 (file)
@@ -2861,7 +2861,7 @@ static void createTransNlaData(bContext *C, TransInfo *t)
                }
                
                /* cleanup temp list */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return;
        }
        
@@ -2994,7 +2994,7 @@ static void createTransNlaData(bContext *C, TransInfo *t)
        }
        
        /* cleanup temp list */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ********************* ACTION EDITOR ****************** */
@@ -3183,7 +3183,7 @@ static void posttrans_action_clean(bAnimContext *ac, bAction *act)
        }
 
        /* free temp data */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ----------------------------- */
@@ -3458,7 +3458,7 @@ static void createTransActionData(bContext *C, TransInfo *t)
        /* stop if trying to build list if nothing selected */
        if (count == 0) {
                /* cleanup temp list */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return;
        }
        
@@ -3547,7 +3547,7 @@ static void createTransActionData(bContext *C, TransInfo *t)
        }
 
        /* cleanup temp list */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* ********************* GRAPH EDITOR ************************* */
@@ -3738,7 +3738,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t)
        /* stop if trying to build list if nothing selected */
        if (count == 0) {
                /* cleanup temp list */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
                return;
        }
        
@@ -3870,7 +3870,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t)
        }
        
        /* cleanup temp list */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 
@@ -5532,7 +5532,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
                        }
                        
                        /* free temp memory */
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                }
                else if (ac.datatype == ANIMCONT_ACTION) { // TODO: just integrate into the above...
                        /* Depending on the lock status, draw necessary views */
@@ -5664,7 +5664,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
                        }
                        
                        /* free temp memory */
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                }
                
                /* Make sure all F-Curves are set correctly, but not if transform was
@@ -5701,7 +5701,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
                        }
                        
                        /* free temp memory */
-                       BLI_freelistN(&anim_data);
+                       ANIM_animdata_freelist(&anim_data);
                        
                        /* perform after-transfrom validation */
                        ED_nla_postop_refresh(&ac);
index f813db042053a052965bc3c64fd905cc2a378dfd..4b01f620410030d04848821cead1403e5bae5d3c 100644 (file)
@@ -363,7 +363,7 @@ static void recalcData_actedit(TransInfo *t)
                }
                
                /* now free temp channels */
-               BLI_freelistN(&anim_data);
+               ANIM_animdata_freelist(&anim_data);
        }
 }
 /* helper for recalcData() - for Graph Editor transforms */
@@ -423,7 +423,7 @@ static void recalcData_graphedit(TransInfo *t)
        if (dosort) remake_graph_transdata(t, &anim_data);
        
        /* now free temp channels */
-       BLI_freelistN(&anim_data);
+       ANIM_animdata_freelist(&anim_data);
 }
 
 /* helper for recalcData() - for NLA Editor transforms */