[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