[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22986] branches/blender2.5/blender/source /blender/editors: poll functions to stop crashing when running operators in an invalid context .
Campbell Barton
ideasman42 at gmail.com
Fri Sep 4 10:49:11 CEST 2009
Revision: 22986
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22986
Author: campbellbarton
Date: 2009-09-04 10:49:11 +0200 (Fri, 04 Sep 2009)
Log Message:
-----------
poll functions to stop crashing when running operators in an invalid context.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/object/editconstraint.c
branches/blender2.5/blender/source/blender/editors/physics/ed_pointcache.c
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_ops.c
branches/blender2.5/blender/source/blender/editors/space_console/console_ops.c
branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c
Modified: branches/blender2.5/blender/source/blender/editors/object/editconstraint.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/editconstraint.c 2009-09-04 07:26:32 UTC (rev 22985)
+++ branches/blender2.5/blender/source/blender/editors/object/editconstraint.c 2009-09-04 08:49:11 UTC (rev 22986)
@@ -465,6 +465,12 @@
/* ---------- Distance-Dependent Constraints ---------- */
/* StretchTo, Limit Distance */
+static int stretchto_poll(bContext *C)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_StretchToConstraint);
+ return (ptr.id.data && ptr.data);
+}
+
static int stretchto_reset_exec (bContext *C, wmOperator *op)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_StretchToConstraint);
@@ -484,6 +490,7 @@
ot->description= "Reset original length of bone for Stretch To Constraint.";
ot->exec= stretchto_reset_exec;
+ ot->poll= stretchto_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -501,6 +508,12 @@
return OPERATOR_FINISHED;
}
+static int limitdistance_poll(bContext *C)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_LimitDistanceConstraint);
+ return (ptr.id.data && ptr.data);
+}
+
void CONSTRAINT_OT_limitdistance_reset (wmOperatorType *ot)
{
/* identifiers */
@@ -509,6 +522,7 @@
ot->description= "Reset limiting distance for Limit Distance Constraint.";
ot->exec= limitdistance_reset_exec;
+ ot->poll= limitdistance_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -516,6 +530,12 @@
/* ------------- Child-Of Constraint ------------------ */
+static int childof_poll(bContext *C)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_ChildOfConstraint);
+ return (ptr.id.data && ptr.data);
+}
+
/* ChildOf Constraint - set inverse callback */
static int childof_set_inverse_exec (bContext *C, wmOperator *op)
{
@@ -582,12 +602,12 @@
ot->description= "Set inverse correction for ChildOf constraint.";
ot->exec= childof_set_inverse_exec;
+ ot->poll= childof_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-
/* ChildOf Constraint - clear inverse callback */
static int childof_clear_inverse_exec (bContext *C, wmOperator *op)
{
@@ -612,6 +632,7 @@
ot->description= "Clear inverse correction for ChildOf constraint.";
ot->exec= childof_clear_inverse_exec;
+ ot->poll= childof_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -684,6 +705,12 @@
}
}
+static int constraint_poll(bContext *C)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
+ return (ptr.id.data && ptr.data);
+}
+
static int constraint_delete_exec (bContext *C, wmOperator *op)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
@@ -711,6 +738,7 @@
/* callbacks */
ot->exec= constraint_delete_exec;
+ ot->poll= constraint_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -747,6 +775,7 @@
/* callbacks */
ot->exec= constraint_move_down_exec;
+ ot->poll= constraint_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -784,6 +813,7 @@
/* callbacks */
ot->exec= constraint_move_up_exec;
+ ot->poll= constraint_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
Modified: branches/blender2.5/blender/source/blender/editors/physics/ed_pointcache.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/physics/ed_pointcache.c 2009-09-04 07:26:32 UTC (rev 22985)
+++ branches/blender2.5/blender/source/blender/editors/physics/ed_pointcache.c 2009-09-04 08:49:11 UTC (rev 22986)
@@ -72,6 +72,12 @@
return 1;
}
+static int ptcache_poll(bContext *C)
+{
+ PointerRNA ptr= CTX_data_pointer_get_type(C, "PointCache", &RNA_PointCache);
+ return (ptr.data && ptr.id.data);
+}
+
static int ptcache_bake_all_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
@@ -215,7 +221,7 @@
/* api callbacks */
ot->exec= ptcache_bake_exec;
- ot->poll= ptcache_bake_all_poll;
+ ot->poll= ptcache_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -230,7 +236,7 @@
/* api callbacks */
ot->exec= ptcache_free_bake_exec;
- ot->poll= ptcache_bake_all_poll;
+ ot->poll= ptcache_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -243,7 +249,7 @@
/* api callbacks */
ot->exec= ptcache_bake_from_cache_exec;
- ot->poll= ptcache_bake_all_poll;
+ ot->poll= ptcache_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -308,7 +314,7 @@
/* api callbacks */
ot->exec= ptcache_add_new_exec;
- ot->poll= ptcache_bake_all_poll;
+ ot->poll= ptcache_poll; // ptcache_bake_all_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -321,7 +327,7 @@
/* api callbacks */
ot->exec= ptcache_remove_exec;
- ot->poll= ptcache_bake_all_poll;
+ ot->poll= ptcache_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
Modified: branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_ops.c 2009-09-04 07:26:32 UTC (rev 22985)
+++ branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_ops.c 2009-09-04 08:49:11 UTC (rev 22986)
@@ -613,6 +613,12 @@
/********************** new particle settings operator *********************/
+static int psys_poll(bContext *C)
+{
+ PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
+ return (ptr.data != NULL);
+}
+
static int new_particle_settings_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
@@ -657,6 +663,7 @@
/* api callbacks */
ot->exec= new_particle_settings_exec;
+ ot->poll= psys_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -948,6 +955,9 @@
FileBrowseOp *fbo= op->customdata;
char *str;
+ if (RNA_property_is_set(op->ptr, "filename")==0 || fbo==NULL)
+ return OPERATOR_CANCELLED;
+
str= RNA_string_get_alloc(op->ptr, "filename", 0, 0);
RNA_property_string_set(&fbo->ptr, fbo->prop, str);
RNA_property_update(C, &fbo->ptr, fbo->prop);
Modified: branches/blender2.5/blender/source/blender/editors/space_console/console_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_console/console_ops.c 2009-09-04 07:26:32 UTC (rev 22985)
+++ branches/blender2.5/blender/source/blender/editors/space_console/console_ops.c 2009-09-04 08:49:11 UTC (rev 22986)
@@ -234,7 +234,12 @@
return 1;
}
+static int console_poll(bContext *C)
+{
+ return (CTX_wm_space_console(C) != NULL);
+}
+
/* static funcs for text editing */
/* similar to the text editor, with some not used. keep compatible */
@@ -695,6 +700,7 @@
/* api callbacks */
ot->exec= zoom_exec;
+ ot->poll= console_poll;
/* flags */
/* ot->flag= OPTYPE_REGISTER; */ /* super annoying */
Modified: branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c 2009-09-04 07:26:32 UTC (rev 22985)
+++ branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c 2009-09-04 08:49:11 UTC (rev 22986)
@@ -1478,7 +1478,7 @@
ARegion *ar= CTX_wm_region(C);
/* ensure we have the right region, it's optional */
- if(ar->regiontype != RGN_TYPE_WINDOW)
+ if(ar && ar->regiontype != RGN_TYPE_WINDOW)
ar= NULL;
switch(type) {
More information about the Bf-blender-cvs
mailing list