Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2009-08-02 07:15:24 +0400
committerJoshua Leung <aligorith@gmail.com>2009-08-02 07:15:24 +0400
commitdd2db3703f4d3b36e33aa0cec31aea697227ba89 (patch)
tree5cac63b0020cf143ea2701048315252038d20b1b /source/blender/editors/transform
parent41b72408a96167d2afc53a325e3b9024f1d717e7 (diff)
2.5 - Fixes for crashes when moving keyframes in F-Curve channels
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform_generics.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 6622d82545d..9e04799d77e 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -271,28 +271,34 @@ static void editmesh_apply_to_mirror(TransInfo *t)
*/
static void animedit_refresh_id_tags (ID *id)
{
- AnimData *adt= BKE_animdata_from_id(id);
-
- /* tag AnimData for refresh so that other views will update in realtime with these changes */
- if (adt)
- adt->recalc |= ADT_RECALC_ANIM;
+ if (id) {
+ AnimData *adt= BKE_animdata_from_id(id);
- /* if ID-block is Object, set recalc flags */
- // TODO: this should probably go through the depsgraph instead... but for now, let's be lazy
- switch (GS(id->name)) {
- case ID_OB:
- {
- Object *ob= (Object *)id;
- ob->recalc |= OB_RECALC;
+ /* tag AnimData for refresh so that other views will update in realtime with these changes */
+ if (adt)
+ adt->recalc |= ADT_RECALC_ANIM;
+
+ /* if ID-block is Object, set recalc flags */
+ // TODO: this should probably go through the depsgraph instead... but for now, let's be lazy
+ switch (GS(id->name)) {
+ case ID_OB:
+ {
+ Object *ob= (Object *)id;
+ ob->recalc |= OB_RECALC;
+ }
+ break;
}
- break;
}
}
/* for the realtime animation recording feature, handle overlapping data */
static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer)
{
- ScreenAnimData *sad= animtimer->customdata;
+ ScreenAnimData *sad= (animtimer) ? animtimer->customdata : NULL;
+
+ /* sanity checks */
+ if ELEM3(NULL, scene, id, sad)
+ return;
/* check if we need a new strip if:
* - if animtimer is running
@@ -301,7 +307,7 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer)
*/
if (IS_AUTOKEY_FLAG(INSERTAVAIL)==0 && (scene->toolsettings->autokey_flag & ANIMRECORD_FLAG_WITHNLA)) {
/* if playback has just looped around, we need to add a new NLA track+strip to allow a clean pass to occur */
- if (sad->flag & ANIMPLAY_FLAG_JUMPED) {
+ if ((sad) && (sad->flag & ANIMPLAY_FLAG_JUMPED)) {
AnimData *adt= BKE_animdata_from_id(id);
/* perform push-down manually with some differences
@@ -351,7 +357,7 @@ void recalcData(TransInfo *t)
flushTransSeq(t);
}
else if (t->spacetype == SPACE_ACTION) {
- Scene *scene;
+ Scene *scene= t->scene;
bAnimContext ac;
ListBase anim_data = {NULL, NULL};
@@ -362,7 +368,7 @@ void recalcData(TransInfo *t)
/* NOTE: sync this with the code in ANIM_animdata_get_context() */
memset(&ac, 0, sizeof(bAnimContext));
- scene= ac.scene= t->scene;
+ ac.scene= t->scene;
ac.obact= OBACT;
ac.sa= t->sa;
ac.ar= t->ar;