[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50402] trunk/blender: change templates to call modal_handler_add() is called last since any errors between calling this function and returning will crash blender .

Campbell Barton ideasman42 at gmail.com
Wed Sep 5 02:11:39 CEST 2012


Revision: 50402
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50402
Author:   campbellbarton
Date:     2012-09-05 00:11:39 +0000 (Wed, 05 Sep 2012)
Log Message:
-----------
change templates to call modal_handler_add() is called last since any errors between calling this function and returning will crash blender. see [#30687]

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_operators/wm.py
    trunk/blender/release/scripts/templates/operator_modal.py
    trunk/blender/release/scripts/templates/operator_modal_draw.py
    trunk/blender/release/scripts/templates/operator_modal_timer.py
    trunk/blender/release/scripts/templates/operator_modal_view3d.py
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/release/scripts/startup/bl_operators/wm.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/wm.py	2012-09-04 23:34:08 UTC (rev 50401)
+++ trunk/blender/release/scripts/startup/bl_operators/wm.py	2012-09-05 00:11:39 UTC (rev 50402)
@@ -735,7 +735,7 @@
 
         if not self._values:
             self.report({'WARNING'}, "Nothing to operate on: %s[ ].%s" %
-                    (self.data_path_iter, self.data_path_item))
+                        (self.data_path_iter, self.data_path_item))
 
             return {'CANCELLED'}
         else:

Modified: trunk/blender/release/scripts/templates/operator_modal.py
===================================================================
--- trunk/blender/release/scripts/templates/operator_modal.py	2012-09-04 23:34:08 UTC (rev 50401)
+++ trunk/blender/release/scripts/templates/operator_modal.py	2012-09-05 00:11:39 UTC (rev 50402)
@@ -26,9 +26,10 @@
 
     def invoke(self, context, event):
         if context.object:
-            context.window_manager.modal_handler_add(self)
             self.first_mouse_x = event.mouse_x
             self.first_value = context.object.location.x
+
+            context.window_manager.modal_handler_add(self)
             return {'RUNNING_MODAL'}
         else:
             self.report({'WARNING'}, "No active object, could not finish")

Modified: trunk/blender/release/scripts/templates/operator_modal_draw.py
===================================================================
--- trunk/blender/release/scripts/templates/operator_modal_draw.py	2012-09-04 23:34:08 UTC (rev 50401)
+++ trunk/blender/release/scripts/templates/operator_modal_draw.py	2012-09-05 00:11:39 UTC (rev 50402)
@@ -53,14 +53,13 @@
 
     def invoke(self, context, event):
         if context.area.type == 'VIEW_3D':
-            context.window_manager.modal_handler_add(self)
-
             # Add the region OpenGL drawing callback
             # draw in view space with 'POST_VIEW' and 'PRE_VIEW'
             self._handle = context.region.callback_add(draw_callback_px, (self, context), 'POST_PIXEL')
 
             self.mouse_path = []
 
+            context.window_manager.modal_handler_add(self)
             return {'RUNNING_MODAL'}
         else:
             self.report({'WARNING'}, "View3D not found, cannot run operator")

Modified: trunk/blender/release/scripts/templates/operator_modal_timer.py
===================================================================
--- trunk/blender/release/scripts/templates/operator_modal_timer.py	2012-09-04 23:34:08 UTC (rev 50401)
+++ trunk/blender/release/scripts/templates/operator_modal_timer.py	2012-09-05 00:11:39 UTC (rev 50402)
@@ -21,8 +21,8 @@
         return {'PASS_THROUGH'}
 
     def execute(self, context):
+        self._timer = context.window_manager.event_timer_add(0.1, context.window)
         context.window_manager.modal_handler_add(self)
-        self._timer = context.window_manager.event_timer_add(0.1, context.window)
         return {'RUNNING_MODAL'}
 
     def cancel(self, context):

Modified: trunk/blender/release/scripts/templates/operator_modal_view3d.py
===================================================================
--- trunk/blender/release/scripts/templates/operator_modal_view3d.py	2012-09-04 23:34:08 UTC (rev 50401)
+++ trunk/blender/release/scripts/templates/operator_modal_view3d.py	2012-09-05 00:11:39 UTC (rev 50402)
@@ -45,14 +45,13 @@
             v3d = context.space_data
             rv3d = v3d.region_3d
 
-            context.window_manager.modal_handler_add(self)
-
             if rv3d.view_perspective == 'CAMERA':
                 rv3d.view_perspective = 'PERSP'
 
             self._initial_mouse = Vector((event.mouse_x, event.mouse_y, 0.0))
             self._initial_location = rv3d.view_location.copy()
 
+            context.window_manager.modal_handler_add(self)
             return {'RUNNING_MODAL'}
         else:
             self.report({'WARNING'}, "Active space must be a View3d")

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2012-09-04 23:34:08 UTC (rev 50401)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2012-09-05 00:11:39 UTC (rev 50402)
@@ -1444,14 +1444,15 @@
 			
 		}
 		else {
-			printf("%s: error - missing modal\n", __func__);
+			printf("%s: error '%s' missing modal\n", __func__, op->idname);
 		}
 	}
 	else {
 		wmOperatorType *ot = WM_operatortype_find(event->keymap_idname, 0);
 
-		if (ot)
+		if (ot) {
 			retval = wm_operator_invoke(C, ot, event, properties, NULL, FALSE);
+		}
 	}
 	/* Finished and pass through flag as handled */
 




More information about the Bf-blender-cvs mailing list