diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-09-09 21:41:36 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-09-09 21:41:36 +0400 |
commit | 7bd1f9a234aa0adeecc3ec8e77eead598b5af232 (patch) | |
tree | 1828b4481186ef27b9d07548fcf8f4baf562e688 | |
parent | f9367c4c4d75d4c823029e64f8c5d371e507df52 (diff) |
- bugfix, operators were getting their properties registered twice.
- operator properties are now converted into python property() class members which bypass the operator 'properties' member.
self.properties.mysetting
... can now be written as ...
self.mysetting
- fix for error reloading rigify
-rw-r--r-- | release/scripts/modules/bpy_types.py | 8 | ||||
-rw-r--r-- | release/scripts/ui/properties_data_armature_rigify.py | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_wm.c | 1 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_operator_wrap.c | 3 |
4 files changed, 13 insertions, 1 deletions
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index b349fa0a76e..d3a1a5544f5 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -701,6 +701,14 @@ class OrderedMeta(RNAMeta): class Operator(StructRNA, metaclass=OrderedMeta): __slots__ = () + @classmethod + def easy_getsets(cls): + def bypass_attr(attr): + setattr(cls, attr, property(lambda self: getattr(self.properties, attr), lambda self, value: setattr(self.properties, attr, value))) + for attr, value in list(cls.__dict__.items()): + if type(value) == tuple and len(value) == 2 and type(value[1]) == dict: + bypass_attr(attr) + class Macro(StructRNA, metaclass=OrderedMeta): # bpy_types is imported before ops is defined diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py index 92b9074892b..3a34f8e1b9d 100644 --- a/release/scripts/ui/properties_data_armature_rigify.py +++ b/release/scripts/ui/properties_data_armature_rigify.py @@ -318,7 +318,7 @@ def register(): def unregister(): - bpy.types.Scene.RemoveProperty("pose_templates") + del bpy.types.Scene.pose_templates space_info.INFO_MT_armature_add.remove(menu_func) if __name__ == "__main__": diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index f4c19db1277..900a1fd60cf 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -840,6 +840,7 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports, /* create a new menu type */ dummyot.ext.srna= RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator"); + RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */ dummyot.ext.data= data; dummyot.ext.call= call; dummyot.ext.free= free; diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index 6d16896fb16..27da839960b 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -45,6 +45,9 @@ static void operator_properties_init(wmOperatorType *ot) PyErr_Print(); /* failed to register operator props */ PyErr_Clear(); } + + // see bpy_types.py:Operator, May redo this some other way! + PyObject_CallMethod(py_class, "easy_getsets", NULL); } void operator_wrapper(wmOperatorType *ot, void *userdata) |