Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/io/export_3ds.py4
-rw-r--r--release/scripts/io/export_fbx.py4
-rw-r--r--release/scripts/io/export_mdd.py4
-rw-r--r--release/scripts/io/export_obj.py4
-rw-r--r--release/scripts/io/export_ply.py4
-rw-r--r--release/scripts/io/export_x3d.py4
-rw-r--r--release/scripts/io/import_anim_bvh.py4
-rw-r--r--release/scripts/io/import_scene_3ds.py4
-rw-r--r--release/scripts/io/import_scene_obj.py4
-rw-r--r--release/scripts/io/netrender/operators.py24
-rw-r--r--release/scripts/io/netrender/utils.py2
-rw-r--r--release/scripts/modules/bpy/ops.py2
-rw-r--r--release/scripts/modules/rna_info.py12
-rw-r--r--release/scripts/modules/rna_prop_ui.py6
-rw-r--r--release/scripts/op/add_armature_human.py4
-rw-r--r--release/scripts/op/add_mesh_torus.py4
-rw-r--r--release/scripts/op/console_python.py14
-rw-r--r--release/scripts/op/console_shell.py8
-rw-r--r--release/scripts/op/mesh.py4
-rw-r--r--release/scripts/op/mesh_skin.py4
-rw-r--r--release/scripts/op/object.py14
-rw-r--r--release/scripts/op/presets.py10
-rw-r--r--release/scripts/op/screen_play_rendered_anim.py2
-rw-r--r--release/scripts/op/uvcalc_follow_active.py4
-rw-r--r--release/scripts/op/uvcalc_smart_project.py4
-rw-r--r--release/scripts/op/vertexpaint_dirt.py2
-rw-r--r--release/scripts/op/wm.py68
-rw-r--r--release/scripts/templates/operator.py4
-rw-r--r--release/scripts/templates/operator_simple.py4
-rw-r--r--release/scripts/ui/properties_data_armature_rigify.py32
-rw-r--r--release/scripts/ui/space_console.py19
-rw-r--r--release/scripts/ui/space_info.py24
-rw-r--r--release/scripts/ui/space_userpref.py30
-rw-r--r--source/blender/editors/animation/keyframes_edit.c2
-rw-r--r--source/blender/editors/include/ED_keyframes_edit.h2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c12
-rw-r--r--source/blender/makesrna/intern/rna_wm.c59
-rw-r--r--source/blender/python/intern/bpy_operator.c4
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.c71
-rw-r--r--source/blender/python/intern/bpy_rna.c12
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c6
41 files changed, 276 insertions, 229 deletions
diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py
index edbb80b0272..a60aeeb3cb2 100644
--- a/release/scripts/io/export_3ds.py
+++ b/release/scripts/io/export_3ds.py
@@ -1126,7 +1126,7 @@ class Export3DS(bpy.types.Operator):
def execute(self, context):
save_3ds(self.properties.path, context)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -1136,7 +1136,7 @@ class Export3DS(bpy.types.Operator):
def poll(self, context): # Poll isnt working yet
return context.active_object != None
-bpy.ops.add(Export3DS)
+bpy.types.register(Export3DS)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py
index ba2741a7e7e..401f645536f 100644
--- a/release/scripts/io/export_fbx.py
+++ b/release/scripts/io/export_fbx.py
@@ -3426,7 +3426,7 @@ class ExportFBX(bpy.types.Operator):
self.properties.BATCH_FILE_PREFIX,
self.properties.BATCH_OWN_DIR)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -3434,7 +3434,7 @@ class ExportFBX(bpy.types.Operator):
return ('RUNNING_MODAL',)
-bpy.ops.add(ExportFBX)
+bpy.types.register(ExportFBX)
# if __name__ == "__main__":
# bpy.ops.EXPORT_OT_ply(filename="/tmp/test.ply")
diff --git a/release/scripts/io/export_mdd.py b/release/scripts/io/export_mdd.py
index cfd73b1979e..22e76ae2427 100644
--- a/release/scripts/io/export_mdd.py
+++ b/release/scripts/io/export_mdd.py
@@ -173,14 +173,14 @@ class ExportMDD(bpy.types.Operator):
raise Exception("filename not set")
write(self.properties.path, context.scene, context.active_object,
self.properties.start_frame, self.properties.end_frame, self.properties.fps)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
wm.add_fileselect(self)
return ('RUNNING_MODAL',)
-bpy.ops.add(ExportMDD)
+bpy.types.register(ExportMDD)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/io/export_obj.py b/release/scripts/io/export_obj.py
index d6026d10ba9..9d9b0e88732 100644
--- a/release/scripts/io/export_obj.py
+++ b/release/scripts/io/export_obj.py
@@ -980,7 +980,7 @@ class ExportOBJ(bpy.types.Operator):
EXPORT_SEL_ONLY=self.properties.use_selection,
EXPORT_ALL_SCENES=self.properties.use_all_scenes)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -991,7 +991,7 @@ class ExportOBJ(bpy.types.Operator):
-bpy.ops.add(ExportOBJ)
+bpy.types.register(ExportOBJ)
import dynamic_menu
diff --git a/release/scripts/io/export_ply.py b/release/scripts/io/export_ply.py
index 858e22952b8..301fb4c5fe8 100644
--- a/release/scripts/io/export_ply.py
+++ b/release/scripts/io/export_ply.py
@@ -297,7 +297,7 @@ class ExportPLY(bpy.types.Operator):
EXPORT_COLORS=self.properties.use_colors,
)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -316,7 +316,7 @@ class ExportPLY(bpy.types.Operator):
row.prop(props, "use_colors")
-bpy.ops.add(ExportPLY)
+bpy.types.register(ExportPLY)
import dynamic_menu
diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py
index 6cfe0f45626..95ddb21b21d 100644
--- a/release/scripts/io/export_x3d.py
+++ b/release/scripts/io/export_x3d.py
@@ -1233,14 +1233,14 @@ class ExportX3D(bpy.types.Operator):
def execute(self, context):
x3d_export(self.properties.path, context, self.properties.apply_modifiers, self.properties.triangulate, self.properties.compress)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
wm.add_fileselect(self)
return ('RUNNING_MODAL',)
-bpy.ops.add(ExportX3D)
+bpy.types.register(ExportX3D)
import dynamic_menu
diff --git a/release/scripts/io/import_anim_bvh.py b/release/scripts/io/import_anim_bvh.py
index 30ff99c1fe8..0ea8dbe5356 100644
--- a/release/scripts/io/import_anim_bvh.py
+++ b/release/scripts/io/import_anim_bvh.py
@@ -887,7 +887,7 @@ class BvhImporter(bpy.types.Operator):
read_bvh(context, self.properties.path)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -895,7 +895,7 @@ class BvhImporter(bpy.types.Operator):
return ('RUNNING_MODAL',)
-bpy.ops.add(BvhImporter)
+bpy.types.register(BvhImporter)
import dynamic_menu
diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py
index 4744c5df01a..d11b242b764 100644
--- a/release/scripts/io/import_scene_3ds.py
+++ b/release/scripts/io/import_scene_3ds.py
@@ -1159,14 +1159,14 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
def execute(self, context):
load_3ds(self.properties.path, context, 0.0, False, False)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
wm.add_fileselect(self)
return ('RUNNING_MODAL',)
-bpy.ops.add(IMPORT_OT_autodesk_3ds)
+bpy.types.register(IMPORT_OT_autodesk_3ds)
import dynamic_menu
menu_func = lambda self, context: self.layout.operator(IMPORT_OT_autodesk_3ds.bl_idname, text="3D Studio (.3ds)...")
diff --git a/release/scripts/io/import_scene_obj.py b/release/scripts/io/import_scene_obj.py
index cbd2b831e55..e4a218fce4d 100644
--- a/release/scripts/io/import_scene_obj.py
+++ b/release/scripts/io/import_scene_obj.py
@@ -1616,7 +1616,7 @@ class IMPORT_OT_obj(bpy.types.Operator):
self.properties.IMAGE_SEARCH,
self.properties.POLYGROUPS)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -1624,7 +1624,7 @@ class IMPORT_OT_obj(bpy.types.Operator):
return ('RUNNING_MODAL',)
-bpy.ops.add(IMPORT_OT_obj)
+bpy.types.register(IMPORT_OT_obj)
import dynamic_menu
diff --git a/release/scripts/io/netrender/operators.py b/release/scripts/io/netrender/operators.py
index ec229fbb471..7f36087a30c 100644
--- a/release/scripts/io/netrender/operators.py
+++ b/release/scripts/io/netrender/operators.py
@@ -79,7 +79,7 @@ class RENDER_OT_netslave_bake(bpy.types.Operator):
#bpy.ops.wm.save_mainfile(path = path + os.sep + root + "_baked.blend")
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -106,7 +106,7 @@ class RENDER_OT_netclientanim(bpy.types.Operator):
bpy.ops.screen.render('INVOKE_AREA', animation=True)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -136,7 +136,7 @@ class RENDER_OT_netclientsend(bpy.types.Operator):
self.report('ERROR', str(err))
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -176,7 +176,7 @@ class RENDER_OT_netclientstatus(bpy.types.Operator):
job.name = j.name
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -206,7 +206,7 @@ class RENDER_OT_netclientblacklistslave(bpy.types.Operator):
netsettings.slaves.remove(netsettings.active_slave_index)
netsettings.active_slave_index = -1
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -236,7 +236,7 @@ class RENDER_OT_netclientwhitelistslave(bpy.types.Operator):
netsettings.slaves_blacklist.remove(netsettings.active_blacklisted_slave_index)
netsettings.active_blacklisted_slave_index = -1
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -282,7 +282,7 @@ class RENDER_OT_netclientslaves(bpy.types.Operator):
slave = netsettings.slaves[-1]
slave.name = s.name
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -311,7 +311,7 @@ class RENDER_OT_netclientcancel(bpy.types.Operator):
netsettings.jobs.remove(netsettings.active_job_index)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -338,7 +338,7 @@ class RENDER_OT_netclientcancelall(bpy.types.Operator):
while(len(netsettings.jobs) > 0):
netsettings.jobs.remove(0)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -383,7 +383,7 @@ class netclientdownload(bpy.types.Operator):
conn.close()
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -406,7 +406,7 @@ class netclientscan(bpy.types.Operator):
netsettings.server_address = address
netsettings.server_port = port
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
@@ -432,7 +432,7 @@ class netclientweb(bpy.types.Operator):
webbrowser.open("http://%s:%i" % (netsettings.server_address, netsettings.server_port))
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
return self.execute(context)
diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py
index 3da15a33b65..2d22dfb7320 100644
--- a/release/scripts/io/netrender/utils.py
+++ b/release/scripts/io/netrender/utils.py
@@ -62,7 +62,7 @@ def rnaType(rna_type):
return rna_type
def rnaOperator(rna_op):
- if bpy: bpy.ops.add(rna_op)
+ if bpy: bpy.types.register(rna_op)
return rna_op
def reporting(report, message, errorType = None):
diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py
index 93c0d719580..268189b2db4 100644
--- a/release/scripts/modules/bpy/ops.py
+++ b/release/scripts/modules/bpy/ops.py
@@ -21,7 +21,7 @@
# for slightly faster access
from _bpy import ops as ops_module
-op_add = ops_module.add
+# op_add = ops_module.add
op_remove = ops_module.remove
op_add_macro = ops_module.add_macro
op_dir = ops_module.dir
diff --git a/release/scripts/modules/rna_info.py b/release/scripts/modules/rna_info.py
index 1de750a4ff2..84171335c64 100644
--- a/release/scripts/modules/rna_info.py
+++ b/release/scripts/modules/rna_info.py
@@ -121,12 +121,18 @@ class InfoFunctionRNA:
# self.name = rna_func.name # functions have no name!
self.description = rna_func.description.strip()
- self.args = [] # todo
- self.return_value = None # todo
+ self.args = []
+ self.return_value = None
def build(self):
rna_prop = self.bl_prop
- pass
+
+ for rna_id, rna_prop in rna_type.parameters.items():
+ prop = GetInfoPropertyRNA(rna_prop, parent_id)
+ if rna_prop.use_return:
+ self.return_value = prop
+ else:
+ self.args.append(prop)
def __repr__(self):
txt = ''
diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py
index 0aa62bb5960..aac6431768d 100644
--- a/release/scripts/modules/rna_prop_ui.py
+++ b/release/scripts/modules/rna_prop_ui.py
@@ -196,7 +196,7 @@ class WM_OT_properties_edit(bpy.types.Operator):
prop_ui['description'] = self.properties.description
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
@@ -242,7 +242,7 @@ class WM_OT_properties_add(bpy.types.Operator):
property = unique_name(item.keys())
item[property] = 1.0
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_properties_remove(bpy.types.Operator):
@@ -256,4 +256,4 @@ class WM_OT_properties_remove(bpy.types.Operator):
def execute(self, context):
item = eval("context.%s" % self.properties.path)
del item[self.properties.property]
- return ('FINISHED',)
+ return {'FINISHED'}
diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py
index 264f290f271..8696312eae0 100644
--- a/release/scripts/op/add_armature_human.py
+++ b/release/scripts/op/add_armature_human.py
@@ -607,10 +607,10 @@ class AddHuman(bpy.types.Operator):
bones.remove(bones[0])
metarig_template()
bpy.ops.object.mode_set(mode=mode_orig)
- return ('FINISHED',)
+ return {'FINISHED'}
# Register the operator
-bpy.ops.add(AddHuman)
+bpy.types.register(AddHuman)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/op/add_mesh_torus.py b/release/scripts/op/add_mesh_torus.py
index 7e3b28b628e..685f1cae8a4 100644
--- a/release/scripts/op/add_mesh_torus.py
+++ b/release/scripts/op/add_mesh_torus.py
@@ -122,10 +122,10 @@ class AddTorus(bpy.types.Operator):
ob_new.location = tuple(context.scene.cursor_location)
- return ('FINISHED',)
+ return {'FINISHED'}
# Register the operator
-bpy.ops.add(AddTorus)
+bpy.types.register(AddTorus)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py
index 7f1d35ede20..383eb3c12d3 100644
--- a/release/scripts/op/console_python.py
+++ b/release/scripts/op/console_python.py
@@ -79,10 +79,10 @@ def execute(context):
try:
line = sc.history[-1].line
except:
- return ('CANCELLED',)
+ return {'CANCELLED'}
if sc.console_type != 'PYTHON':
- return ('CANCELLED',)
+ return {'CANCELLED'}
console, stdout, stderr = get_console(hash(context.region))
@@ -136,7 +136,7 @@ def execute(context):
if output_err:
add_scrollback(output_err, 'ERROR')
- return ('FINISHED',)
+ return {'FINISHED'}
def autocomplete(context):
@@ -150,10 +150,10 @@ def autocomplete(context):
line = current_line.line
if not console:
- return ('CANCELLED',)
+ return {'CANCELLED'}
if sc.console_type != 'PYTHON':
- return ('CANCELLED',)
+ return {'CANCELLED'}
# This function isnt aware of the text editor or being an operator
# just does the autocomp then copy its results back
@@ -172,7 +172,7 @@ def autocomplete(context):
context.area.tag_redraw()
- return ('FINISHED',)
+ return {'FINISHED'}
def banner(context):
@@ -195,4 +195,4 @@ def banner(context):
console = get_console(hash(context.region))[0]
console.locals["C"] = bpy.context
- return ('FINISHED',)
+ return {'FINISHED'}
diff --git a/release/scripts/op/console_shell.py b/release/scripts/op/console_shell.py
index bdb4a746d95..4dc21114367 100644
--- a/release/scripts/op/console_shell.py
+++ b/release/scripts/op/console_shell.py
@@ -49,7 +49,7 @@ def execute(context):
try:
line = sc.history[-1].line
except:
- return ('CANCELLED',)
+ return {'CANCELLED'}
bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
@@ -60,13 +60,13 @@ def execute(context):
remove_duplicates=True)
sc.prompt = os.getcwd() + PROMPT
- return ('FINISHED',)
+ return {'FINISHED'}
def autocomplete(context):
# sc = context.space_data
# TODO
- return ('CANCELLED',)
+ return {'CANCELLED'}
def banner(context):
@@ -75,4 +75,4 @@ def banner(context):
shell_run("bash --version")
sc.prompt = os.getcwd() + PROMPT
- return ('FINISHED',)
+ return {'FINISHED'}
diff --git a/release/scripts/op/mesh.py b/release/scripts/op/mesh.py
index 1de06963c7a..a8f50f28178 100644
--- a/release/scripts/op/mesh.py
+++ b/release/scripts/op/mesh.py
@@ -65,11 +65,11 @@ class MeshSelectInteriorFaces(bpy.types.Operator):
def execute(self, context):
main(context)
- return ('FINISHED',)
+ return {'FINISHED'}
# Register the operator
-bpy.ops.add(MeshSelectInteriorFaces)
+bpy.types.register(MeshSelectInteriorFaces)
if __name__ == "__main__":
bpy.ops.mesh.faces_select_interior()
diff --git a/release/scripts/op/mesh_skin.py b/release/scripts/op/mesh_skin.py
index a78da39c5d4..251cfb32b93 100644
--- a/release/scripts/op/mesh_skin.py
+++ b/release/scripts/op/mesh_skin.py
@@ -643,11 +643,11 @@ class MESH_OT_skin(bpy.types.Operator):
def execute(self, context):
main(context)
- return ('FINISHED',)
+ return {'FINISHED'}
# Register the operator
-bpy.ops.add(MESH_OT_skin)
+bpy.types.register(MESH_OT_skin)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py
index 228d8566f77..1b421cac98c 100644
--- a/release/scripts/op/object.py
+++ b/release/scripts/op/object.py
@@ -57,7 +57,7 @@ class SelectPattern(bpy.types.Operator):
elif not self.properties.extend:
item.selected = False
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -97,7 +97,7 @@ class SubdivisionSet(bpy.types.Operator):
relative = self.properties.relative
if relative and level == 0:
- return ('CANCELLED',) # nothing to do
+ return {'CANCELLED'} # nothing to do
def set_object_subd(obj):
for mod in obj.modifiers:
@@ -132,7 +132,7 @@ class SubdivisionSet(bpy.types.Operator):
for obj in context.selected_editable_objects:
set_object_subd(obj)
- return ('FINISHED',)
+ return {'FINISHED'}
class Retopo(bpy.types.Operator):
@@ -146,9 +146,9 @@ class Retopo(bpy.types.Operator):
def execute(self, context):
import retopo
retopo.main()
- return ('FINISHED',)
+ return {'FINISHED'}
-bpy.ops.add(SelectPattern)
-bpy.ops.add(SubdivisionSet)
-bpy.ops.add(Retopo)
+bpy.types.register(SelectPattern)
+bpy.types.register(SubdivisionSet)
+bpy.types.register(Retopo)
diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py
index 0f6d5e11b5c..af338c9364d 100644
--- a/release/scripts/op/presets.py
+++ b/release/scripts/op/presets.py
@@ -40,7 +40,7 @@ class AddPresetBase(bpy.types.Operator):
def execute(self, context):
if not self.properties.name:
- return ('FINISHED',)
+ return {'FINISHED'}
filename = self._as_filename(self.properties.name) + ".py"
@@ -53,7 +53,7 @@ class AddPresetBase(bpy.types.Operator):
file_preset.close()
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -125,6 +125,6 @@ class AddPresetCloth(AddPresetBase):
preset_subdir = "cloth"
-bpy.ops.add(AddPresetRender)
-bpy.ops.add(AddPresetSSS)
-bpy.ops.add(AddPresetCloth)
+bpy.types.register(AddPresetRender)
+bpy.types.register(AddPresetSSS)
+bpy.types.register(AddPresetCloth)
diff --git a/release/scripts/op/screen_play_rendered_anim.py b/release/scripts/op/screen_play_rendered_anim.py
index a1401304c08..40173879787 100644
--- a/release/scripts/op/screen_play_rendered_anim.py
+++ b/release/scripts/op/screen_play_rendered_anim.py
@@ -146,4 +146,4 @@ class PlayRenderedAnim(bpy.types.Operator):
return('FINISHED',)
-bpy.ops.add(PlayRenderedAnim)
+bpy.types.register(PlayRenderedAnim)
diff --git a/release/scripts/op/uvcalc_follow_active.py b/release/scripts/op/uvcalc_follow_active.py
index f2dcaec4728..8ab5b8ec454 100644
--- a/release/scripts/op/uvcalc_follow_active.py
+++ b/release/scripts/op/uvcalc_follow_active.py
@@ -257,9 +257,9 @@ class FollowActiveQuads(bpy.types.Operator):
def execute(self, context):
main(context, self)
- return ('FINISHED',)
+ return {'FINISHED'}
-bpy.ops.add(FollowActiveQuads)
+bpy.types.register(FollowActiveQuads)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py
index f3c8f7ed7dd..25840e04cf8 100644
--- a/release/scripts/op/uvcalc_smart_project.py
+++ b/release/scripts/op/uvcalc_smart_project.py
@@ -1130,9 +1130,9 @@ class SmartProject(bpy.types.Operator):
def execute(self, context):
main(context, self.properties.island_margin, self.properties.angle_limit)
- return ('FINISHED',)
+ return {'FINISHED'}
-bpy.ops.add(SmartProject)
+bpy.types.register(SmartProject)
# Add to a menu
import dynamic_menu
diff --git a/release/scripts/op/vertexpaint_dirt.py b/release/scripts/op/vertexpaint_dirt.py
index a521c24e06c..f029541dbca 100644
--- a/release/scripts/op/vertexpaint_dirt.py
+++ b/release/scripts/op/vertexpaint_dirt.py
@@ -175,7 +175,7 @@ class VertexPaintDirt(bpy.types.Operator):
return('FINISHED',)
-bpy.ops.add(VertexPaintDirt)
+bpy.types.register(VertexPaintDirt)
if __name__ == "__main__":
bpy.ops.mesh.vertex_paint_dirt()
diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py
index 45a9e91d2c6..58cc2743932 100644
--- a/release/scripts/op/wm.py
+++ b/release/scripts/op/wm.py
@@ -34,7 +34,7 @@ class MESH_OT_delete_edgeloop(bpy.types.Operator):
bpy.ops.mesh.select_more()
bpy.ops.mesh.remove_doubles()
- return ('FINISHED',)
+ return {'FINISHED'}
rna_path_prop = StringProperty(name="Context Attributes",
description="rna context string", maxlen=1024, default="")
@@ -60,9 +60,9 @@ def context_path_validate(context, path):
def execute_context_assign(self, context):
if context_path_validate(context, self.properties.path) is Ellipsis:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
exec("context.%s=self.properties.value" % self.properties.path)
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_context_set_boolean(bpy.types.Operator):
@@ -143,9 +143,9 @@ class WM_OT_context_set_value(bpy.types.Operator):
def execute(self, context):
if context_path_validate(context, self.properties.path) is Ellipsis:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
exec("context.%s=%s" % (self.properties.path, self.properties.value))
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_context_toggle(bpy.types.Operator):
@@ -159,12 +159,12 @@ class WM_OT_context_toggle(bpy.types.Operator):
def execute(self, context):
if context_path_validate(context, self.properties.path) is Ellipsis:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
exec("context.%s=not (context.%s)" %
(self.properties.path, self.properties.path))
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_context_toggle_enum(bpy.types.Operator):
@@ -183,14 +183,14 @@ class WM_OT_context_toggle_enum(bpy.types.Operator):
def execute(self, context):
if context_path_validate(context, self.properties.path) is Ellipsis:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
exec("context.%s = ['%s', '%s'][context.%s!='%s']" % \
(self.properties.path, self.properties.value_1,\
self.properties.value_2, self.properties.path,
self.properties.value_2))
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_context_cycle_int(bpy.types.Operator):
@@ -207,7 +207,7 @@ class WM_OT_context_cycle_int(bpy.types.Operator):
value = context_path_validate(context, self.properties.path)
if value is Ellipsis:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
self.properties.value = value
if self.properties.reverse:
@@ -224,7 +224,7 @@ class WM_OT_context_cycle_int(bpy.types.Operator):
self.properties.value = - (1 << 32)
execute_context_assign(self, context)
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_context_cycle_enum(bpy.types.Operator):
@@ -240,7 +240,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator):
value = context_path_validate(context, self.properties.path)
if value is Ellipsis:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
orig_value = value
@@ -276,7 +276,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator):
# set the new value
exec("context.%s=advance_enum" % self.properties.path)
- return ('FINISHED',)
+ return {'FINISHED'}
doc_id = StringProperty(name="Doc ID",
description="", maxlen=1024, default="", hidden=True)
@@ -318,12 +318,12 @@ class WM_OT_doc_view(bpy.types.Operator):
(self._prefix, class_name_full, class_prop)
else:
- return ('PASS_THROUGH',)
+ return {'PASS_THROUGH'}
import webbrowser
webbrowser.open(url)
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_doc_edit(bpy.types.Operator):
@@ -388,7 +388,7 @@ class WM_OT_doc_edit(bpy.types.Operator):
self._send_xmlrpc(upload)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -403,29 +403,29 @@ class WM_OT_reload_scripts(bpy.types.Operator):
def execute(self, context):
MOD = type(bpy)
bpy.load_scripts(True)
- return ('FINISHED',)
+ return {'FINISHED'}
-bpy.ops.add(MESH_OT_delete_edgeloop)
+bpy.types.register(MESH_OT_delete_edgeloop)
-bpy.ops.add(WM_OT_context_set_boolean)
-bpy.ops.add(WM_OT_context_set_int)
-bpy.ops.add(WM_OT_context_set_float)
-bpy.ops.add(WM_OT_context_set_string)
-bpy.ops.add(WM_OT_context_set_enum)
-bpy.ops.add(WM_OT_context_set_value)
-bpy.ops.add(WM_OT_context_toggle)
-bpy.ops.add(WM_OT_context_toggle_enum)
-bpy.ops.add(WM_OT_context_cycle_enum)
-bpy.ops.add(WM_OT_context_cycle_int)
+bpy.types.register(WM_OT_context_set_boolean)
+bpy.types.register(WM_OT_context_set_int)
+bpy.types.register(WM_OT_context_set_float)
+bpy.types.register(WM_OT_context_set_string)
+bpy.types.register(WM_OT_context_set_enum)
+bpy.types.register(WM_OT_context_set_value)
+bpy.types.register(WM_OT_context_toggle)
+bpy.types.register(WM_OT_context_toggle_enum)
+bpy.types.register(WM_OT_context_cycle_enum)
+bpy.types.register(WM_OT_context_cycle_int)
-bpy.ops.add(WM_OT_doc_view)
-bpy.ops.add(WM_OT_doc_edit)
+bpy.types.register(WM_OT_doc_view)
+bpy.types.register(WM_OT_doc_edit)
-bpy.ops.add(WM_OT_reload_scripts)
+bpy.types.register(WM_OT_reload_scripts)
# experemental!
import rna_prop_ui
-bpy.ops.add(rna_prop_ui.WM_OT_properties_edit)
-bpy.ops.add(rna_prop_ui.WM_OT_properties_add)
-bpy.ops.add(rna_prop_ui.WM_OT_properties_remove)
+bpy.types.register(rna_prop_ui.WM_OT_properties_edit)
+bpy.types.register(rna_prop_ui.WM_OT_properties_add)
+bpy.types.register(rna_prop_ui.WM_OT_properties_remove)
diff --git a/release/scripts/templates/operator.py b/release/scripts/templates/operator.py
index 72a6ae53f5f..c6fb887b091 100644
--- a/release/scripts/templates/operator.py
+++ b/release/scripts/templates/operator.py
@@ -30,7 +30,7 @@ class ExportSomeData(bpy.types.Operator):
write_some_data(self.properties.path, context, self.properties.use_setting)
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -46,7 +46,7 @@ class ExportSomeData(bpy.types.Operator):
return self.execute(context)
-bpy.ops.add(ExportSomeData)
+bpy.types.register(ExportSomeData)
# Only needed if you want to add into a dynamic menu
import dynamic_menu
diff --git a/release/scripts/templates/operator_simple.py b/release/scripts/templates/operator_simple.py
index 030ed85f01f..c62d3720d96 100644
--- a/release/scripts/templates/operator_simple.py
+++ b/release/scripts/templates/operator_simple.py
@@ -13,9 +13,9 @@ class SimpleOperator(bpy.types.Operator):
def execute(self, context):
main(context)
- return ('FINISHED',)
+ return {'FINISHED'}
-bpy.ops.add(SimpleOperator)
+bpy.types.register(SimpleOperator)
if __name__ == "__main__":
bpy.ops.object.simple_operator()
diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py
index 9d04afe22b5..12f1b0ed5e5 100644
--- a/release/scripts/ui/properties_data_armature_rigify.py
+++ b/release/scripts/ui/properties_data_armature_rigify.py
@@ -138,7 +138,7 @@ class Reload(bpy.types.Operator):
def execute(self, context):
DATA_PT_template.templates[:] = metarig_templates()
- return ('FINISHED',)
+ return {'FINISHED'}
def rigify_report_exception(operator, exception):
@@ -180,7 +180,7 @@ class Generate(bpy.types.Operator):
except rigify.RigifyError as rig_exception:
rigify_report_exception(self, rig_exception)
- return ('FINISHED',)
+ return {'FINISHED'}
class Validate(bpy.types.Operator):
@@ -196,7 +196,7 @@ class Validate(bpy.types.Operator):
rigify.validate_rig(context, context.object)
except rigify.RigifyError as rig_exception:
rigify_report_exception(self, rig_exception)
- return ('FINISHED',)
+ return {'FINISHED'}
class Sample(bpy.types.Operator):
@@ -219,7 +219,7 @@ class Sample(bpy.types.Operator):
if obj_gen:
obj_gen.location.x = i * 1.0
- return ('FINISHED',)
+ return {'FINISHED'}
class Graph(bpy.types.Operator):
@@ -244,7 +244,7 @@ class Graph(bpy.types.Operator):
os.system("dot -Tpng %s > %s; gnome-open %s &" % (path_dot, path_png, path_png))
#os.system("python /b/xdot.py '%s' &" % path_dot)
- return ('FINISHED',)
+ return {'FINISHED'}
class AsScript(bpy.types.Operator):
@@ -267,7 +267,7 @@ class AsScript(bpy.types.Operator):
file.write(code)
file.close()
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
import os
@@ -294,7 +294,7 @@ class ActiveAssign(bpy.types.Operator):
pose_templates = scene.pose_templates
template_name = DATA_PT_template.templates[pose_templates.active_template_index]
context.active_pose_bone["type"] = template_name
- return ('FINISHED',)
+ return {'FINISHED'}
class ActiveClear(bpy.types.Operator):
@@ -310,7 +310,7 @@ class ActiveClear(bpy.types.Operator):
def execute(self, context):
scene = context.scene
del context.active_pose_bone["type"]
- return ('FINISHED',)
+ return {'FINISHED'}
import space_info
@@ -336,15 +336,15 @@ bpy.types.register(DATA_PT_template)
bpy.types.register(PoseTemplateSettings)
bpy.types.register(PoseTemplate)
-bpy.ops.add(Reload)
-bpy.ops.add(Generate)
-bpy.ops.add(Validate)
-bpy.ops.add(Sample)
-bpy.ops.add(Graph)
-bpy.ops.add(AsScript)
+bpy.types.register(Reload)
+bpy.types.register(Generate)
+bpy.types.register(Validate)
+bpy.types.register(Sample)
+bpy.types.register(Graph)
+bpy.types.register(AsScript)
-bpy.ops.add(ActiveAssign)
-bpy.ops.add(ActiveClear)
+bpy.types.register(ActiveAssign)
+bpy.types.register(ActiveClear)
bpy.types.register(INFO_MT_armature_metarig_add)
diff --git a/release/scripts/ui/space_console.py b/release/scripts/ui/space_console.py
index 5e086435ddd..3e593246e2c 100644
--- a/release/scripts/ui/space_console.py
+++ b/release/scripts/ui/space_console.py
@@ -131,7 +131,7 @@ class ConsoleExec(bpy.types.Operator):
return execute(context)
else:
print("Error: bpy.ops.console.execute_" + sc.language + " - not found")
- return ('FINISHED',)
+ return {'FINISHED'}
class ConsoleAutocomplete(bpy.types.Operator):
@@ -153,11 +153,13 @@ class ConsoleAutocomplete(bpy.types.Operator):
return autocomplete(context)
else:
print("Error: bpy.ops.console.autocomplete_" + sc.language + " - not found")
- return ('FINISHED',)
+ return {'FINISHED'}
class ConsoleBanner(bpy.types.Operator):
+ '''Print a message whem the terminal initializes'''
bl_idname = "console.banner"
+ bl_label = "Console Banner"
def execute(self, context):
sc = context.space_data
@@ -173,12 +175,13 @@ class ConsoleBanner(bpy.types.Operator):
return banner(context)
else:
print("Error: bpy.ops.console.banner_" + sc.language + " - not found")
- return ('FINISHED',)
+ return {'FINISHED'}
class ConsoleLanguage(bpy.types.Operator):
'''Set the current language for this console'''
bl_idname = "console.language"
+ bl_label = "Console Language"
language = StringProperty(name="Language", maxlen=32, default="")
def execute(self, context):
@@ -193,7 +196,7 @@ class ConsoleLanguage(bpy.types.Operator):
bpy.ops.console.history_append(text="", current_character=0,
remove_duplicates=True)
- return ('FINISHED',)
+ return {'FINISHED'}
bpy.types.register(CONSOLE_HT_header)
@@ -202,9 +205,9 @@ bpy.types.register(CONSOLE_MT_report)
bpy.types.register(CONSOLE_MT_language)
# Stubs that call the language operators
-bpy.ops.add(ConsoleExec)
-bpy.ops.add(ConsoleAutocomplete)
-bpy.ops.add(ConsoleBanner)
+bpy.types.register(ConsoleExec)
+bpy.types.register(ConsoleAutocomplete)
+bpy.types.register(ConsoleBanner)
# Set the language and call the banner
-bpy.ops.add(ConsoleLanguage)
+bpy.types.register(ConsoleLanguage)
diff --git a/release/scripts/ui/space_info.py b/release/scripts/ui/space_info.py
index 56509a6e099..1f7ba15de61 100644
--- a/release/scripts/ui/space_info.py
+++ b/release/scripts/ui/space_info.py
@@ -308,7 +308,7 @@ class HelpOperator(bpy.types.Operator):
def execute(self, context):
import webbrowser
webbrowser.open(self._url)
- return ('FINISHED',)
+ return {'FINISHED'}
class HELP_OT_manual(HelpOperator):
@@ -391,14 +391,14 @@ class HELP_OT_operator_cheat_sheet(bpy.types.Operator):
textblock.write('\n'.join(op_strings))
textblock.name = "OperatorList.txt"
print("See OperatorList.txt textblock")
- return ('FINISHED',)
-
-bpy.ops.add(HELP_OT_manual)
-bpy.ops.add(HELP_OT_release_logs)
-bpy.ops.add(HELP_OT_blender_website)
-bpy.ops.add(HELP_OT_blender_eshop)
-bpy.ops.add(HELP_OT_developer_community)
-bpy.ops.add(HELP_OT_user_community)
-bpy.ops.add(HELP_OT_report_bug)
-bpy.ops.add(HELP_OT_python_api)
-bpy.ops.add(HELP_OT_operator_cheat_sheet)
+ return {'FINISHED'}
+
+bpy.types.register(HELP_OT_manual)
+bpy.types.register(HELP_OT_release_logs)
+bpy.types.register(HELP_OT_blender_website)
+bpy.types.register(HELP_OT_blender_eshop)
+bpy.types.register(HELP_OT_developer_community)
+bpy.types.register(HELP_OT_user_community)
+bpy.types.register(HELP_OT_report_bug)
+bpy.types.register(HELP_OT_python_api)
+bpy.types.register(HELP_OT_operator_cheat_sheet)
diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py
index 81f61b3c78c..08efb92f00e 100644
--- a/release/scripts/ui/space_userpref.py
+++ b/release/scripts/ui/space_userpref.py
@@ -1646,7 +1646,7 @@ class WM_OT_keyconfig_test(bpy.types.Operator):
if self.testConfig(kc):
print("CONFLICT")
- return ('FINISHED',)
+ return {'FINISHED'}
def _string_value(value):
result = ""
@@ -1736,7 +1736,7 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
f.close()
- return ('FINISHED',)
+ return {'FINISHED'}
def invoke(self, context, event):
wm = context.manager
@@ -1753,7 +1753,7 @@ class WM_OT_keymap_edit(bpy.types.Operator):
wm = context.manager
km = context.keymap
km.copy_to_user()
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_keymap_restore(bpy.types.Operator):
@@ -1773,7 +1773,7 @@ class WM_OT_keymap_restore(bpy.types.Operator):
km = context.keymap
km.restore_to_default()
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_keyitem_restore(bpy.types.Operator):
"Restore key map item."
@@ -1792,7 +1792,7 @@ class WM_OT_keyitem_restore(bpy.types.Operator):
km.restore_item_to_default(kmi)
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_keyitem_add(bpy.types.Operator):
"Add key map item."
@@ -1806,7 +1806,7 @@ class WM_OT_keyitem_add(bpy.types.Operator):
km.add_modal_item("", 'A', 'PRESS') # kmi
else:
km.add_item("", 'A', 'PRESS') # kmi
- return ('FINISHED',)
+ return {'FINISHED'}
class WM_OT_keyitem_remove(bpy.types.Operator):
@@ -1819,12 +1819,12 @@ class WM_OT_keyitem_remove(bpy.types.Operator):
kmi = context.keyitem
km = context.keymap
km.remove_item(kmi)
- return ('FINISHED',)
-
-bpy.ops.add(WM_OT_keyconfig_export)
-bpy.ops.add(WM_OT_keyconfig_test)
-bpy.ops.add(WM_OT_keymap_edit)
-bpy.ops.add(WM_OT_keymap_restore)
-bpy.ops.add(WM_OT_keyitem_add)
-bpy.ops.add(WM_OT_keyitem_remove)
-bpy.ops.add(WM_OT_keyitem_restore)
+ return {'FINISHED'}
+
+bpy.types.register(WM_OT_keyconfig_export)
+bpy.types.register(WM_OT_keyconfig_test)
+bpy.types.register(WM_OT_keymap_edit)
+bpy.types.register(WM_OT_keymap_restore)
+bpy.types.register(WM_OT_keyitem_add)
+bpy.types.register(WM_OT_keyitem_remove)
+bpy.types.register(WM_OT_keyitem_restore)
diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c
index 9476aa479a7..413f01590ed 100644
--- a/source/blender/editors/animation/keyframes_edit.c
+++ b/source/blender/editors/animation/keyframes_edit.c
@@ -562,7 +562,7 @@ short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt)
/* used to remap times from one range to another
* requires: bed->data = BeztEditCD_Remap
*/
-short bezt_remap_times(BeztEditData *bed, BezTriple *bezt)
+void bezt_remap_times(BeztEditData *bed, BezTriple *bezt)
{
BeztEditCD_Remap *rmap= (BeztEditCD_Remap*)bed->data;
const float scale = (rmap->newMax - rmap->newMin) / (rmap->oldMax - rmap->oldMin);
diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h
index 26290d8771c..9e29d747d4a 100644
--- a/source/blender/editors/include/ED_keyframes_edit.h
+++ b/source/blender/editors/include/ED_keyframes_edit.h
@@ -154,7 +154,7 @@ short bezt_to_cfraelem(BeztEditData *bed, struct BezTriple *bezt);
/* used to remap times from one range to another
* requires: bed->custom = BeztEditCD_Remap
*/
-short bezt_remap_times(BeztEditData *bed, struct BezTriple *bezt);
+void bezt_remap_times(BeztEditData *bed, struct BezTriple *bezt);
/* ************************************************ */
/* Destructive Editing API (keyframes_general.c) */
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index bfb7d139074..f174e96120c 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -2102,7 +2102,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op)
Sequence *seq, *seqm, *next;
- int tot, channel_max= 1;
+ int channel_max= 1;
if(ed==NULL)
return OPERATOR_CANCELLED;
@@ -2241,10 +2241,10 @@ void SEQUENCER_OT_meta_separate(wmOperatorType *ot)
/* view_all operator */
static int sequencer_view_all_exec(bContext *C, wmOperator *op)
{
- Scene *scene= CTX_data_scene(C);
+ //Scene *scene= CTX_data_scene(C);
bScreen *sc= CTX_wm_screen(C);
ScrArea *area= CTX_wm_area(C);
- ARegion *ar= CTX_wm_region(C);
+ //ARegion *ar= CTX_wm_region(C);
View2D *v2d= UI_view2d_fromcontext(C);
v2d->cur= v2d->tot;
@@ -2275,11 +2275,11 @@ void SEQUENCER_OT_view_all(wmOperatorType *ot)
static int sequencer_view_all_preview_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
- bScreen *sc= CTX_wm_screen(C);
+ //bScreen *sc= CTX_wm_screen(C);
ScrArea *area= CTX_wm_area(C);
ARegion *ar= CTX_wm_region(C);
SpaceSeq *sseq= area->spacedata.first;
- View2D *v2d= UI_view2d_fromcontext(C);
+ //View2D *v2d= UI_view2d_fromcontext(C);
/* Like zooming on an image view */
@@ -2735,7 +2735,7 @@ static int sequencer_copy_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *seq, *seq_act;
+ Sequence *seq;
if(ed==NULL)
return OPERATOR_CANCELLED;
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index fdad021291a..51cd9d5d3ac 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -605,39 +605,6 @@ static void rna_Operator_unregister(const bContext *C, StructRNA *type)
WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
}
-void operator_wrapper(wmOperatorType *ot, void *userdata)
-{
- /* take care not to overwrite anything set in
- * WM_operatortype_append_ptr before opfunc() is called */
- StructRNA *srna = ot->srna;
- *ot= *((wmOperatorType *)userdata);
- ot->srna= srna; /* restore */
-
- RNA_struct_blender_type_set(ot->ext.srna, ot);
-}
-
-#if 0
-static int PYTHON_OT_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
- return PYTHON_OT_generic(PYOP_INVOKE, C, op->type, op, event, NULL);
-}
-
-static int PYTHON_OT_execute(bContext *C, wmOperator *op)
-{
- return PYTHON_OT_generic(PYOP_EXEC, C, op->type, op, NULL, NULL);
-}
-
-static int PYTHON_OT_poll(bContext *C, wmOperatorType *ot)
-{
- return PYTHON_OT_generic(PYOP_POLL, C, ot, NULL, NULL, NULL);
-}
-
-static void PYTHON_OT_draw(bContext *C, wmOperator *op, uiLayout *layout)
-{
- PYTHON_OT_generic(PYOP_DRAW, C, op->type, op, NULL, layout);
-}
-#endif
-
static int operator_poll(bContext *C, wmOperatorType *ot)
{
PointerRNA ptr;
@@ -708,7 +675,11 @@ static int operator_invoke(bContext *C, wmOperator *op, wmEvent *event)
return result;
}
+
+void operator_wrapper(wmOperatorType *ot, void *userdata);
+
static char _operator_idname[OP_MAX_TYPENAME];
+static char _operator_name[OP_MAX_TYPENAME];
static char _operator_descr[1024];
static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
{
@@ -720,6 +691,7 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports,
/* setup dummy operator & operator type to store static properties in */
dummyop.type= &dummyot;
dummyot.idname= _operator_idname; /* only assigne the pointer, string is NULL'd */
+ dummyot.name= _operator_name; /* only assigne the pointer, string is NULL'd */
dummyot.description= _operator_descr; /* only assigne the pointer, string is NULL'd */
RNA_pointer_create(NULL, &RNA_Operator, &dummyop, &dummyotr);
@@ -729,12 +701,19 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports,
{ /* convert foo.bar to FOO_OT_bar
* allocate the description and the idname in 1 go */
- int idlen = strlen(_operator_idname);
- int desclen = strlen(_operator_descr);
- dummyot.idname= MEM_callocN(sizeof(char) * (idlen + desclen + 2 + 3), "_operator_idname"); /* 2 terminators and 3 to convert a.b -> A_OT_b */
- WM_operator_bl_idname(dummyot.idname, _operator_idname); /* convert the idname from python */
- dummyot.description = dummyot.idname + (idlen + 4);
- strcpy(dummyot.description, _operator_descr);
+ int idlen = strlen(_operator_idname) + 4;
+ int namelen = strlen(_operator_name) + 1;
+ int desclen = strlen(_operator_descr) + 1;
+ char *ch, *ch_arr;
+ ch_arr= ch= MEM_callocN(sizeof(char) * (idlen + namelen + desclen), "_operator_idname"); /* 2 terminators and 3 to convert a.b -> A_OT_b */
+ WM_operator_bl_idname(ch, _operator_idname); /* convert the idname from python */
+ dummyot.idname= ch;
+ ch += idlen;
+ strcpy(ch, _operator_name);
+ dummyot.name = ch;
+ ch += namelen;
+ strcpy(ch, _operator_descr);
+ dummyot.description = ch;
}
if(strlen(identifier) >= sizeof(dummyop.idname)) {
@@ -806,7 +785,7 @@ static void rna_def_operator(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_REGISTER);
prop= RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
- RNA_def_property_string_sdna(prop, NULL, "type->description");
+ RNA_def_property_string_sdna(prop, NULL, "type->name");
RNA_def_property_string_maxlength(prop, 1024); /* else it uses the pointer size! */
RNA_def_property_flag(prop, PROP_REGISTER);
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 7ccbe1c16a4..101f3619da4 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -244,7 +244,7 @@ PyObject *BPY_operator_module( void )
static PyMethodDef pyop_as_string_meth ={"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL};
static PyMethodDef pyop_dir_meth = {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL};
static PyMethodDef pyop_getrna_meth = {"get_rna", (PyCFunction) pyop_getrna, METH_O, NULL};
- static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL};
+// static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL};
static PyMethodDef pyop_add_macro_meth ={"add_macro", (PyCFunction) PYOP_wrap_add_macro, METH_O, NULL};
static PyMethodDef pyop_macro_def_meth ={"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL};
static PyMethodDef pyop_remove_meth = {"remove", (PyCFunction) PYOP_wrap_remove, METH_O, NULL};
@@ -256,7 +256,7 @@ PyObject *BPY_operator_module( void )
PyModule_AddObject( submodule, "as_string",PyCFunction_New(&pyop_as_string_meth,NULL) );
PyModule_AddObject( submodule, "dir", PyCFunction_New(&pyop_dir_meth, NULL) );
PyModule_AddObject( submodule, "get_rna", PyCFunction_New(&pyop_getrna_meth, NULL) );
- PyModule_AddObject( submodule, "add", PyCFunction_New(&pyop_add_meth, NULL) );
+// PyModule_AddObject( submodule, "add", PyCFunction_New(&pyop_add_meth, NULL) );
PyModule_AddObject( submodule, "add_macro", PyCFunction_New(&pyop_add_macro_meth, NULL) );
PyModule_AddObject( submodule, "macro_define",PyCFunction_New(&pyop_macro_def_meth, NULL) );
PyModule_AddObject( submodule, "remove", PyCFunction_New(&pyop_remove_meth, NULL) );
diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c
index cd5b0756531..3bd18d98563 100644
--- a/source/blender/python/intern/bpy_operator_wrap.c
+++ b/source/blender/python/intern/bpy_operator_wrap.c
@@ -105,7 +105,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
py_class_instance = PyObject_Call(py_class, args, NULL);
Py_DECREF(args);
-
+
if (py_class_instance==NULL) { /* Initializing the class worked, now run its invoke function */
PyErr_Print();
PyErr_Clear();
@@ -128,7 +128,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
else if (mode==PYOP_EXEC) {
item= PyObject_GetAttrString(py_class, "execute");
args = PyTuple_New(2);
-
+
PyTuple_SET_ITEM(args, 1, pyrna_struct_CreatePyObject(&ptr_context));
}
else if (mode==PYOP_POLL) {
@@ -173,7 +173,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
Py_DECREF(args);
Py_DECREF(item);
}
-
+
if (ret == NULL) { /* covers py_class_instance failing too */
if(op)
BPy_errors_to_report(op->reports);
@@ -202,7 +202,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
* If we ever want to do this and use the props again,
* it can be done with - pyrna_pydict_to_props(op->ptr, kw, "")
*/
-
+
Py_DECREF(ret);
}
@@ -215,7 +215,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
BPY_flag_def *flag_def = pyop_ret_flags;
strcpy(flag_str, "");
-
+
while(flag_def->name) {
if (ret_flag & flag_def->flag) {
if(flag_str[1])
@@ -260,6 +260,49 @@ static void PYTHON_OT_draw(bContext *C, wmOperator *op, uiLayout *layout)
PYTHON_OT_generic(PYOP_DRAW, C, op->type, op, NULL, layout);
}
+
+
+void operator_wrapper(wmOperatorType *ot, void *userdata)
+{
+ /* take care not to overwrite anything set in
+ * WM_operatortype_append_ptr before opfunc() is called */
+ StructRNA *srna = ot->srna;
+ *ot= *((wmOperatorType *)userdata);
+ ot->srna= srna; /* restore */
+
+ RNA_struct_blender_type_set(ot->ext.srna, ot);
+
+
+ /* Can't use this because it returns a dict proxy
+ *
+ * item= PyObject_GetAttrString(py_class, "__dict__");
+ */
+ {
+ PyObject *py_class = ot->ext.data;
+ PyObject *item= ((PyTypeObject*)py_class)->tp_dict;
+ if(item) {
+ /* only call this so pyrna_deferred_register_props gives a useful error
+ * WM_operatortype_append_ptr will call RNA_def_struct_identifier
+ * later */
+ RNA_def_struct_identifier(ot->srna, ot->idname);
+
+ if(pyrna_deferred_register_props(ot->srna, item)!=0) {
+ /* failed to register operator props */
+ PyErr_Print();
+ PyErr_Clear();
+
+ }
+ }
+ else {
+ PyErr_Clear();
+ }
+ }
+}
+
+
+
+
+
void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata)
{
PyObject *py_class = (PyObject *)userdata;
@@ -283,8 +326,8 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata)
item= PyObject_GetAttrString(py_class, PYOP_ATTR_DESCRIPTION);
ot->description= (item && PyUnicode_Check(item)) ? _PyUnicode_AsString(item):"undocumented python operator";
Py_XDECREF(item);
-
- /* api callbacks, detailed checks dont on adding */
+
+ /* api callbacks, detailed checks dont on adding */
if (PyObject_HasAttrString(py_class, "invoke"))
ot->invoke= PYTHON_OT_invoke;
//else
@@ -296,9 +339,9 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata)
ot->pyop_poll= PYTHON_OT_poll;
if (PyObject_HasAttrString(py_class, "draw"))
ot->ui= PYTHON_OT_draw;
-
+
ot->pyop_data= userdata;
-
+
/* flags */
ot->flag= 0;
@@ -419,11 +462,11 @@ void PYTHON_OT_MACRO_wrapper(wmOperatorType *ot, void *userdata)
/* pyOperators - Operators defined IN Python */
PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class)
-{
+{
PyObject *base_class, *item;
wmOperatorType *ot;
-
-
+
+
char *idname= NULL;
char idname_bl[OP_MAX_TYPENAME]; /* converted to blender syntax */
@@ -466,7 +509,7 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class)
Py_DECREF(item);
/* end annoying conversion! */
-
+
/* remove if it already exists */
if ((ot=WM_operatortype_exists(idname))) {
if(ot->pyop_data) {
@@ -474,7 +517,7 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class)
}
WM_operatortype_remove(idname);
}
-
+
Py_INCREF(py_class);
WM_operatortype_append_ptr(PYTHON_OT_wrapper, py_class);
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index d0cc3e95097..8eda19d8198 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -3912,7 +3912,18 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
}
}
+#if 0
+ if(strcmp(identifier, "bl_label") == 0) {
+ item= PyObject_GetAttrString(py_class, "__doc__");
+ if(item) {
+ Py_DECREF(item); /* no need to keep a ref, the class owns it */
+
+ if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class error:") != 0)
+ return -1;
+ }
+ }
+#endif
if (item == NULL && (((flag & PROP_REGISTER_OPTIONAL) != PROP_REGISTER_OPTIONAL))) {
PyErr_Format( PyExc_AttributeError, "expected %.200s, %.200s class to have an \"%.200s\" attribute", class_type, py_class_name, identifier);
return -1;
@@ -4092,6 +4103,7 @@ void pyrna_free_types(void)
}
}
RNA_PROP_END;
+
}
/* Note! MemLeak XXX
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 4ad067e8743..6d008d5cbb3 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -2655,9 +2655,13 @@ void wm_operatortype_free(void)
{
wmOperatorType *ot;
- for(ot= global_ops.first; ot; ot= ot->next)
+ for(ot= global_ops.first; ot; ot= ot->next) {
if(ot->macro.first)
wm_operatortype_free_macro(ot);
+
+ if(ot->ext.srna) /* python operator, allocs own string */
+ MEM_freeN(ot->idname);
+ }
BLI_freelistN(&global_ops);
}