From 8cf9e5f8c3904b3e46743c92c0275c4c54726866 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 5 Sep 2012 00:11:39 +0000 Subject: change templates to call modal_handler_add() is called last since any errors between calling this function and returning will crash blender. see [#30687] --- release/scripts/startup/bl_operators/wm.py | 2 +- release/scripts/templates/operator_modal.py | 3 ++- release/scripts/templates/operator_modal_draw.py | 3 +-- release/scripts/templates/operator_modal_timer.py | 2 +- release/scripts/templates/operator_modal_view3d.py | 3 +-- source/blender/windowmanager/intern/wm_event_system.c | 5 +++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index ed4d5dd55f5..513277a2099 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -735,7 +735,7 @@ class WM_OT_context_modal_mouse(Operator): 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: diff --git a/release/scripts/templates/operator_modal.py b/release/scripts/templates/operator_modal.py index d8115bc95bf..88e5ee80590 100644 --- a/release/scripts/templates/operator_modal.py +++ b/release/scripts/templates/operator_modal.py @@ -26,9 +26,10 @@ class ModalOperator(bpy.types.Operator): 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") diff --git a/release/scripts/templates/operator_modal_draw.py b/release/scripts/templates/operator_modal_draw.py index f2d5ad8982b..f1c4e113b0a 100644 --- a/release/scripts/templates/operator_modal_draw.py +++ b/release/scripts/templates/operator_modal_draw.py @@ -53,14 +53,13 @@ class ModalDrawOperator(bpy.types.Operator): 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") diff --git a/release/scripts/templates/operator_modal_timer.py b/release/scripts/templates/operator_modal_timer.py index 6d2ec95aedb..72c153df9d2 100644 --- a/release/scripts/templates/operator_modal_timer.py +++ b/release/scripts/templates/operator_modal_timer.py @@ -21,8 +21,8 @@ class ModalTimerOperator(bpy.types.Operator): return {'PASS_THROUGH'} def execute(self, context): - context.window_manager.modal_handler_add(self) self._timer = context.window_manager.event_timer_add(0.1, context.window) + context.window_manager.modal_handler_add(self) return {'RUNNING_MODAL'} def cancel(self, context): diff --git a/release/scripts/templates/operator_modal_view3d.py b/release/scripts/templates/operator_modal_view3d.py index 0babf169610..c870bbffdcf 100644 --- a/release/scripts/templates/operator_modal_view3d.py +++ b/release/scripts/templates/operator_modal_view3d.py @@ -45,14 +45,13 @@ class ViewOperator(bpy.types.Operator): 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") diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 60c61dbe88c..dee9d036891 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1444,14 +1444,15 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand } 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 */ -- cgit v1.2.3