[Bf-extensions-cvs] [4488335a] master: Sequencer tools: use new bpy_extras.keyconfig_utils's keymaps registering, remove register_module call.

Bastien Montagne noreply at git.blender.org
Sat Apr 8 11:42:26 CEST 2017


Commit: 4488335acef2a47c2701bdcc7a139c7a85044e12
Author: Bastien Montagne
Date:   Sat Apr 8 11:41:03 2017 +0200
Branches: master
https://developer.blender.org/rBAC4488335acef2a47c2701bdcc7a139c7a85044e12

Sequencer tools: use new bpy_extras.keyconfig_utils's keymaps registering, remove register_module call.

===================================================================

M	sequencer_tools/__init__.py
M	sequencer_tools/export_strips.py

===================================================================

diff --git a/sequencer_tools/__init__.py b/sequencer_tools/__init__.py
index 7e072745..0d9ea63b 100644
--- a/sequencer_tools/__init__.py
+++ b/sequencer_tools/__init__.py
@@ -19,8 +19,8 @@
 bl_info = {
     "name": "Sequencer Tools",
     "author": "mont29",
-    "version": (0, 0, 2),
-    "blender": (2, 66, 0),
+    "version": (0, 0, 4),
+    "blender": (2, 78, 0),
     "location": "Sequencer menus/UI",
     "description": "Various Sequencer tools.",
     "warning": "",
@@ -36,15 +36,19 @@ if "bpy" in locals():
     imp.reload(export_strips)
 else:
     import bpy
+    import bpy_extras.keyconfig_utils
     from . import export_strips
 
 
+classes = export_strips.classes
+
+
 KEYMAPS = (
     # First, keymap identifiers (last bool is True for modal km).
-    (("Sequencer", "WINDOW", "SEQUENCE_EDITOR", False), (
+    (('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', False), (
     # Then a tuple of keymap items, defined by a dict of kwargs for the km new func, and a tuple of tuples (name, val)
     # for ops properties, if needing non-default values.
-        ({"idname": export_strips.SEQExportStrip.bl_idname, "type": "P", "value": "PRESS", "shift": True, "ctrl": True},
+        ({"idname": export_strips.SEQExportStrip.bl_idname, "type": 'P', "value": 'PRESS', "shift": True, "ctrl": True},
          ()),
     )),
 )
@@ -54,60 +58,20 @@ def menu_func(self, context):
     self.layout.operator(export_strips.SEQExportStrip.bl_idname, text="Export Selected")
 
 
-def find_keymap_items(km, idname):
-    return (i for i in km.keymap_items if i.idname == idname)
-
-def update_keymap(activate):
-    # Add.
-    if activate:
-        kconf = bpy.context.window_manager.keyconfigs.addon
-        if not kconf:
-            return  # happens in background mode...
-        for km_info, km_items in KEYMAPS:
-            km_name, km_regtype, km_sptype, km_ismodal = km_info
-            kmap = [k for k in kconf.keymaps
-                      if k.name == km_name and k.region_type == km_regtype and
-                         k.space_type == km_sptype and k.is_modal == km_ismodal]
-            if kmap:
-                kmap = kmap[0]
-            else:
-                kmap = kconf.keymaps.new(km_name, region_type=km_regtype, space_type=km_sptype, modal=km_ismodal)
-            for kmi_kwargs, props in km_items:
-                kmi = kmap.keymap_items.new(**kmi_kwargs)
-                kmi.active = True
-                for prop, val in props:
-                    setattr(kmi.properties, prop, val)
-
-    # Remove.
-    else:
-        # XXX We must also clean up user keyconfig, else, if user has customized one of our shortcut, this
-        #     customization remains in memory, and comes back when re-enabling the addon, causing a segfault... :/
-        kconfs = bpy.context.window_manager.keyconfigs
-        for kconf in (kconfs.user, kconfs.addon):
-            for km_info, km_items in KEYMAPS:
-                km_name, km_regtype, km_sptype, km_ismodal = km_info
-                kmaps = (k for k in kconf.keymaps
-                           if k.name == km_name and k.region_type == km_regtype and
-                              k.space_type == km_sptype and k.is_modal == km_ismodal)
-                for kmap in kmaps:
-                    for kmi_kwargs, props in km_items:
-                        for kmi in find_keymap_items(kmap, kmi_kwargs["idname"]):
-                            kmap.keymap_items.remove(kmi)
-                # XXX We won’t remove addons keymaps themselves, other addons might also use them!
-
-
 def register():
-    bpy.utils.register_module(__name__)
+    for cls in classes:
+        bpy.utils.register_class(cls)
     bpy.types.SEQUENCER_MT_strip.append(menu_func)
 
-    update_keymap(True)
+    bpy_extras.keyconfig_utils.addon_keymap_register(bpy.context.window_manager, KEYMAPS)
 
 
 def unregister():
-    update_keymap(False)
+    bpy_extras.keyconfig_utils.addon_keymap_unregister(bpy.context.window_manager, KEYMAPS)
 
     bpy.types.SEQUENCER_MT_strip.remove(menu_func)
-    bpy.utils.unregister_module(__name__)
+    for cls in classes:
+        bpy.utils.unregister_class(cls)
 
 
 if __name__ == "__main__":
diff --git a/sequencer_tools/export_strips.py b/sequencer_tools/export_strips.py
index 5948fad8..1b751e7d 100644
--- a/sequencer_tools/export_strips.py
+++ b/sequencer_tools/export_strips.py
@@ -68,3 +68,7 @@ class SEQExportStrip(bpy.types.Operator):
         winman = context.window_manager
         winman.fileselect_add(self)
         return {'RUNNING_MODAL'}
+
+classes = (
+    SEQExportStrip,
+)



More information about the Bf-extensions-cvs mailing list