[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