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);
        }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to