[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33202] trunk/blender/source/blender/ editors/transform: [#24827] Crash when auto-keyframing while playing animation

Martin Poirier theeth at yahoo.com
Sat Nov 20 22:43:17 CET 2010


Revision: 33202
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33202
Author:   theeth
Date:     2010-11-20 22:43:16 +0100 (Sat, 20 Nov 2010)

Log Message:
-----------
[#24827] Crash when auto-keyframing while playing animation

Reported by Andr?\195?\169 Oliveira

Need to pass valid context to autokeying callback function.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2010-11-20 19:20:27 UTC (rev 33201)
+++ trunk/blender/source/blender/editors/transform/transform.c	2010-11-20 21:43:16 UTC (rev 33202)
@@ -1490,6 +1490,8 @@
 {
 	int options = 0;
 
+	t->context = C;
+
 	/* added initialize, for external calls to set stuff in TransInfo, like undo string */
 
 	t->state = TRANS_STARTING;
@@ -1723,11 +1725,15 @@
 		}
 	}
 
+	t->context = NULL;
+
 	return 1;
 }
 
-void transformApply(const bContext *C, TransInfo *t)
+void transformApply(bContext *C, TransInfo *t)
 {
+	t->context = C;
+
 	if ((t->redraw & TREDRAW_HARD) || (t->draw_handle_apply == NULL && (t->redraw & TREDRAW_SOFT)))
 	{
 		selectConstraint(t);
@@ -1752,15 +1758,17 @@
 		//do_screenhandlers(G.curscreen);
 		t->redraw |= TREDRAW_HARD;
 	}
+
+	t->context = NULL;
 }
 
-void drawTransformApply(const struct bContext *C, struct ARegion *UNUSED(ar), void *arg)
+void drawTransformApply(const bContext *C, struct ARegion *UNUSED(ar), void *arg)
 {
 	TransInfo *t = arg;
 
 	if (t->redraw & TREDRAW_SOFT) {
 		t->redraw |= TREDRAW_HARD;
-		transformApply(C, t);
+		transformApply((bContext *)C, t);
 	}
 }
 
@@ -1768,6 +1776,8 @@
 {
 	int exit_code = OPERATOR_RUNNING_MODAL;
 
+	t->context = C;
+
 	if (t->state != TRANS_STARTING && t->state != TRANS_RUNNING)
 	{
 		/* handle restoring objects */
@@ -1804,6 +1814,8 @@
 		viewRedrawForce(C, t);
 	}
 
+	t->context = NULL;
+
 	return exit_code;
 }
 

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2010-11-20 19:20:27 UTC (rev 33201)
+++ trunk/blender/source/blender/editors/transform/transform.h	2010-11-20 21:43:16 UTC (rev 33202)
@@ -317,6 +317,7 @@
 	float		axis_orig[3];	/* TransCon can change 'axis', store the original value here */
 
 	void		*view;
+	struct bContext *context; /* Only valid (non null) during an operator called function. */
 	struct ScrArea	*sa;
 	struct ARegion	*ar;
 	struct Scene	*scene;
@@ -448,7 +449,7 @@
 int initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event, int mode);
 void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
 int  transformEvent(TransInfo *t, struct wmEvent *event);
-void transformApply(const struct bContext *C, TransInfo *t);
+void transformApply(struct bContext *C, TransInfo *t);
 int  transformEnd(struct bContext *C, TransInfo *t);
 
 void setTransformViewMatrices(TransInfo *t);

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2010-11-20 19:20:27 UTC (rev 33201)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2010-11-20 21:43:16 UTC (rev 33202)
@@ -817,7 +817,7 @@
 				// TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes?
 				if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) {
 					animrecord_check_state(t->scene, &ob->id, t->animtimer);
-					autokeyframe_ob_cb_func(NULL, t->scene, (View3D *)t->view, ob, t->mode);
+					autokeyframe_ob_cb_func(t->context, t->scene, (View3D *)t->view, ob, t->mode);
 				}
 				
 				/* sets recalc flags fully, instead of flushing existing ones 





More information about the Bf-blender-cvs mailing list