diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py index d3221d4c81c..3e5d64a3e35 100644 --- a/release/scripts/io/export_3ds.py +++ b/release/scripts/io/export_3ds.py @@ -1128,7 +1128,7 @@ class EXPORT_OT_autodesk_3ds(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) def poll(self, context): # Poll isnt working yet diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py index 92a7286d4af..b303e536b99 100644 --- a/release/scripts/io/export_fbx.py +++ b/release/scripts/io/export_fbx.py @@ -3429,7 +3429,7 @@ class EXPORT_OT_fbx(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) diff --git a/release/scripts/io/export_mdd.py b/release/scripts/io/export_mdd.py index 28e6a325cbe..677361f3392 100644 --- a/release/scripts/io/export_mdd.py +++ b/release/scripts/io/export_mdd.py @@ -184,7 +184,7 @@ class EXPORT_OT_mdd(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) bpy.ops.add(EXPORT_OT_mdd) diff --git a/release/scripts/io/export_obj.py b/release/scripts/io/export_obj.py index 92e6841016a..72f1835fea8 100644 --- a/release/scripts/io/export_obj.py +++ b/release/scripts/io/export_obj.py @@ -995,7 +995,7 @@ class EXPORT_OT_obj(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) def poll(self, context): # Poll isnt working yet diff --git a/release/scripts/io/export_ply.py b/release/scripts/io/export_ply.py index 61f3484f97d..7235d51450e 100644 --- a/release/scripts/io/export_ply.py +++ b/release/scripts/io/export_ply.py @@ -288,7 +288,7 @@ class EXPORT_OT_ply(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py index 4b215ccdd9f..6de67252676 100644 --- a/release/scripts/io/export_x3d.py +++ b/release/scripts/io/export_x3d.py @@ -1235,7 +1235,7 @@ class EXPORT_OT_x3d(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) bpy.ops.add(EXPORT_OT_x3d) diff --git a/release/scripts/io/import_3ds.py b/release/scripts/io/import_3ds.py index ebb4ed59c36..62612cc79d4 100644 --- a/release/scripts/io/import_3ds.py +++ b/release/scripts/io/import_3ds.py @@ -1161,7 +1161,7 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) bpy.ops.add(IMPORT_OT_autodesk_3ds) diff --git a/release/scripts/io/import_obj.py b/release/scripts/io/import_obj.py index 4fb7ada5d81..e5e0dc35995 100644 --- a/release/scripts/io/import_obj.py +++ b/release/scripts/io/import_obj.py @@ -1618,7 +1618,7 @@ class IMPORT_OT_obj(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) diff --git a/release/scripts/modules/bpy_ops.py b/release/scripts/modules/bpy_ops.py index 233c072867e..cfcaf3b6083 100644 --- a/release/scripts/modules/bpy_ops.py +++ b/release/scripts/modules/bpy_ops.py @@ -528,7 +528,7 @@ class WM_OT_doc_edit(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.invoke_props_popup(self.__operator__, event) + wm.invoke_props_popup(self, event) return ('RUNNING_MODAL',) diff --git a/release/scripts/templates/operator.py b/release/scripts/templates/operator.py index b0c03045216..88e6a327096 100644 --- a/release/scripts/templates/operator.py +++ b/release/scripts/templates/operator.py @@ -51,11 +51,11 @@ class ExportSomeData(bpy.types.Operator): if True: # File selector - wm.add_fileselect(self.__operator__) # will run self.execute() + wm.add_fileselect(self) # will run self.execute() return ('RUNNING_MODAL',) else if 0: # Redo popup - wm.invoke_props_popup(self.__operator__, event) # + wm.invoke_props_popup(self, event) # return ('RUNNING_MODAL',) else if 0: return self.execute(context) diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py index fc9678a0847..9fd35e9588e 100644 --- a/release/scripts/ui/space_userpref.py +++ b/release/scripts/ui/space_userpref.py @@ -678,7 +678,7 @@ class WM_OT_keyconfig_export(bpy.types.Operator): def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py index f197e4cb8ed..24484f84e44 100644 --- a/release/scripts/ui/space_view3d.py +++ b/release/scripts/ui/space_view3d.py @@ -1553,7 +1553,7 @@ class OBJECT_OT_select_pattern(bpy.types.Operator): ''' def invoke(self, context, event): wm = context.manager - wm.add_fileselect(self.__operator__) + wm.add_fileselect(self) return ('RUNNING_MODAL',) ''' diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index fcfea7db885..b0754ee1cde 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -90,14 +90,18 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat PointerRNA ptr_context; PointerRNA ptr_operator; PointerRNA ptr_event; - PyObject *py_operator; PyGILState_STATE gilstate; bpy_context_set(C, &gilstate); args = PyTuple_New(1); - PyTuple_SET_ITEM(args, 0, PyObject_GetAttrString(py_class, "bl_rna")); // need to use an rna instance as the first arg + + /* poll has no 'op', should be ok still */ + /* use an rna instance as the first arg */ + RNA_pointer_create(NULL, &RNA_Operator, op, &ptr_operator); + PyTuple_SET_ITEM(args, 0, pyrna_struct_CreatePyObject(&ptr_operator)); + py_class_instance = PyObject_Call(py_class, args, NULL); Py_DECREF(args); @@ -120,14 +124,6 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat RNA_STRUCT_END; } - /* set operator pointer RNA as instance "__operator__" attribute */ - if(op) { - RNA_pointer_create(NULL, &RNA_Operator, op, &ptr_operator); - py_operator= pyrna_struct_CreatePyObject(&ptr_operator); - PyDict_SetItemString(class_dict, "__operator__", py_operator); - Py_DECREF(py_operator); - } - RNA_pointer_create(NULL, &RNA_Context, C, &ptr_context); if (mode==PYOP_INVOKE) { @@ -160,6 +156,10 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat Py_DECREF(item); Py_DECREF(class_dict); } + else { + PyErr_Print(); + PyErr_Clear(); + } if (ret == NULL) { /* covers py_class_instance failing too */ if(op)