[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