diff options
-rw-r--r-- | release/scripts/modules/bpy/ops.py | 13 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 11 |
2 files changed, 15 insertions, 9 deletions
diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py index c6bdc21afa6..23d82a98220 100644 --- a/release/scripts/modules/bpy/ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -153,21 +153,24 @@ class bpy_ops_submodule_op(object): return self.module + "." + self.func def __call__(self, *args, **kw): + import bpy + context = bpy.context # Get the operator from blender + wm = context.window_manager + if args: C_dict, C_exec = __class__._parse_args(args) ret = op_call(self.idname_py(), C_dict, kw, C_exec) else: ret = op_call(self.idname_py(), None, kw) - if 'FINISHED' in ret: - import bpy - scene = bpy.context.scene - if scene: # None in backgroud mode + if 'FINISHED' in ret and context.window_manager == wm: + scene = context.scene + if scene: # None in backgroud mode scene.update() else: - for scene in bpy.data.scenes: + for scene in data.scenes: scene.update() return ret diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index c30152c05eb..943467d80ab 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -438,7 +438,7 @@ static void wm_operator_reports(bContext *C, wmOperator *op, int retval, int pop */ static int wm_operator_register_check(wmWindowManager *wm, wmOperatorType *ot) { - return (wm->op_undo_depth == 0) && (ot->flag & OPTYPE_REGISTER); + return wm && (wm->op_undo_depth == 0) && (ot->flag & OPTYPE_REGISTER); } static void wm_operator_finished(bContext *C, wmOperator *op, int repeat) @@ -831,7 +831,6 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe */ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports) { - wmWindowManager *wm= CTX_wm_manager(C); int retval= OPERATOR_CANCELLED; #if 0 @@ -855,7 +854,7 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA /* keep the reports around if needed later */ if ( (retval & OPERATOR_RUNNING_MODAL) || - ((retval & OPERATOR_FINISHED) && wm_operator_register_check(wm, ot)) + ((retval & OPERATOR_FINISHED) && wm_operator_register_check(CTX_wm_manager(C), ot)) ) { reports->flag |= RPT_FREE; /* let blender manage freeing */ } @@ -1722,7 +1721,11 @@ void wm_event_do_handlers(bContext *C) } action |= wm_handlers_do(C, event, &ar->handlers); - + + /* fileread case (python), [#29489] */ + if(CTX_wm_window(C)==NULL) + return; + doit |= (BLI_in_rcti(&ar->winrct, event->x, event->y)); if(action & WM_HANDLER_BREAK) |