[Bf-blender-cvs] [e5c13ae] master: Fix T42372: demo addon in doc was not handling keymaps correctly during (un)registration.

Bastien Montagne noreply at git.blender.org
Mon Oct 27 08:16:30 CET 2014


Commit: e5c13aebea6bb884ad4d54b338152c1867026fa0
Author: Bastien Montagne
Date:   Sun Oct 26 10:01:03 2014 +0100
Branches: master
https://developer.blender.org/rBe5c13aebea6bb884ad4d54b338152c1867026fa0

Fix T42372: demo addon in doc was not handling keymaps correctly during (un)registration.

First, you should unregister in reverse order you registered your operators, keymaps, etc.
Second, when registering keymaps you have to check keyconfigs are actually available (they are not in background mode).

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

M	doc/python_api/rst/info_tutorial_addon.rst

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

diff --git a/doc/python_api/rst/info_tutorial_addon.rst b/doc/python_api/rst/info_tutorial_addon.rst
index 5637cf2..436f74b 100644
--- a/doc/python_api/rst/info_tutorial_addon.rst
+++ b/doc/python_api/rst/info_tutorial_addon.rst
@@ -563,20 +563,26 @@ Bringing it all together
 
        # handle the keymap
        wm = bpy.context.window_manager
-       km = wm.keyconfigs.addon.keymaps.new(name='Object Mode', space_type='EMPTY')
-       kmi = km.keymap_items.new(ObjectCursorArray.bl_idname, 'SPACE', 'PRESS', ctrl=True, shift=True)
-       kmi.properties.total = 4
-       addon_keymaps.append((km, kmi))
+       # Note that in background mode (no GUI available), keyconfigs are not available either, so we have to check this
+       # to avoid nasty errors in background case.
+       kc = wm.keyconfigs.addon
+       if kc:
+           km = wm.keyconfigs.addon.keymaps.new(name='Object Mode', space_type='EMPTY')
+           kmi = km.keymap_items.new(ObjectCursorArray.bl_idname, 'SPACE', 'PRESS', ctrl=True, shift=True)
+           kmi.properties.total = 4
+           addon_keymaps.append((km, kmi))
 
    def unregister():
-       bpy.utils.unregister_class(ObjectCursorArray)
-       bpy.types.VIEW3D_MT_object.remove(menu_func)
-
+       # Note: when unregistering, it's usually good practice to do it in reverse order you registered.
+       # Can avoid strange issues like keymap still referring to operators already unregistered...
        # handle the keymap
        for km, kmi in addon_keymaps:
            km.keymap_items.remove(kmi)
        addon_keymaps.clear()
 
+       bpy.utils.unregister_class(ObjectCursorArray)
+       bpy.types.VIEW3D_MT_object.remove(menu_func)
+
 
    if __name__ == "__main__":
        register()




More information about the Bf-blender-cvs mailing list