[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31185] trunk/blender/source/blender/ python/intern/bpy_rna_callback.c: python draw callback

Campbell Barton ideasman42 at gmail.com
Mon Aug 9 04:29:10 CEST 2010


Revision: 31185
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31185
Author:   campbellbarton
Date:     2010-08-09 04:29:06 +0200 (Mon, 09 Aug 2010)

Log Message:
-----------
python draw callback
- optional argument for the drawing mode crashed when not set
- added a check for the call fuinction being callable
- added a check for the argument being a typle.

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_rna_callback.c

Modified: trunk/blender/source/blender/python/intern/bpy_rna_callback.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna_callback.c	2010-08-09 01:49:10 UTC (rev 31184)
+++ trunk/blender/source/blender/python/intern/bpy_rna_callback.c	2010-08-09 02:29:06 UTC (rev 31185)
@@ -64,20 +64,29 @@
 	char *cb_event_str= NULL;
 	int cb_event;
 
-	if (!PyArg_ParseTuple(args, "OO|s:bpy_struct.callback_add", &cb_func, &cb_args, &cb_event_str))
+	if (!PyArg_ParseTuple(args, "OO!|s:bpy_struct.callback_add", &cb_func, &PyTuple_Type, &cb_args, &cb_event_str))
 		return NULL;
+	
+	if(!PyCallable_Check(cb_func)) {
+		PyErr_SetString(PyExc_TypeError, "callback_add(): first argument isn't callable");
+		return NULL;
+	}
 
 	if(RNA_struct_is_a(self->ptr.type, &RNA_Region)) {
+		if(cb_event_str) {
+			static EnumPropertyItem region_draw_mode_items[] = {
+				{REGION_DRAW_POST_PIXEL, "POST_PIXEL", 0, "Post Pixel", ""},
+				{REGION_DRAW_POST_VIEW, "POST_VIEW", 0, "Post View", ""},
+				{REGION_DRAW_PRE_VIEW, "PRE_VIEW", 0, "Pre View", ""},
+				{0, NULL, 0, NULL, NULL}};
+	
+			if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
+				return NULL;
+		}
+		else {
+			cb_event= REGION_DRAW_POST_PIXEL;
+		}
 
-		static EnumPropertyItem region_draw_mode_items[] = {
-			{REGION_DRAW_POST_VIEW, "POST_VIEW", 0, "Pose View", ""},
-			{REGION_DRAW_POST_PIXEL, "POST_PIXEL", 0, "Post Pixel", ""},
-			{REGION_DRAW_PRE_VIEW, "PRE_VIEW", 0, "Pre View", ""},
-			{0, NULL, 0, NULL, NULL}};
-
-		if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
-			return NULL;
-
 		handle= ED_region_draw_cb_activate(((ARegion *)self->ptr.data)->type, cb_region_draw, (void *)args, cb_event);
 		Py_INCREF(args);
 	}





More information about the Bf-blender-cvs mailing list