[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4188] trunk/py/scripts/addons/ space_view3d_screencast_keys.py: make unregister remove handlers
Campbell Barton
ideasman42 at gmail.com
Tue Jan 22 07:17:19 CET 2013
Revision: 4188
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4188
Author: campbellbarton
Date: 2013-01-22 06:17:18 +0000 (Tue, 22 Jan 2013)
Log Message:
-----------
make unregister remove handlers
Modified Paths:
--------------
trunk/py/scripts/addons/space_view3d_screencast_keys.py
Modified: trunk/py/scripts/addons/space_view3d_screencast_keys.py
===================================================================
--- trunk/py/scripts/addons/space_view3d_screencast_keys.py 2013-01-21 22:42:26 UTC (rev 4187)
+++ trunk/py/scripts/addons/space_view3d_screencast_keys.py 2013-01-22 06:17:18 UTC (rev 4188)
@@ -515,6 +515,19 @@
_handle = None
_timer = None
+ @staticmethod
+ def handle_add(self, context):
+ ScreencastKeysStatus._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, (self, context), 'WINDOW', 'POST_PIXEL')
+ ScreencastKeysStatus._timer = context.window_manager.event_timer_add(0.075, context.window)
+
+ @staticmethod
+ def handle_remove(context):
+ if ScreencastKeysStatus._handle is not None:
+ context.window_manager.event_timer_remove(ScreencastKeysStatus._timer)
+ bpy.types.SpaceView3D.draw_handler_remove(ScreencastKeysStatus._handle, 'WINDOW')
+ ScreencastKeysStatus._handle = None
+ ScreencastKeysStatus._timer = None
+
def modal(self, context, event):
if context.area:
context.area.tag_redraw()
@@ -580,16 +593,14 @@
if not context.window_manager.screencast_keys_keys:
# stop script
- context.window_manager.event_timer_remove(self._timer)
- bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
+ ScreencastKeysStatus.handle_remove(context)
return {'CANCELLED'}
return {'PASS_THROUGH'}
def cancel(self, context):
if context.window_manager.screencast_keys_keys:
- context.window_manager.event_timer_remove(self._timer)
- bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
+ ScreencastKeysStatus.handle_remove(context)
context.window_manager.screencast_keys_keys = False
return {'CANCELLED'}
@@ -603,10 +614,7 @@
self.mouse = []
self.mouse_time = []
ScreencastKeysStatus.overall_time = []
- self._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px,
- (self, context), 'WINDOW', 'POST_PIXEL')
- self._timer = context.window_manager.event_timer_add(0.075,
- context.window)
+ ScreencastKeysStatus.handle_add(self, context)
ScreencastKeysStatus.overall_time.insert(0, time.time())
context.window_manager.modal_handler_add(self)
return {'RUNNING_MODAL'}
@@ -741,23 +749,30 @@
# removal of properties when script is disabled
def clear_properties():
- props = ["screencast_keys_keys", "screencast_keys_mouse",
- "screencast_keys_font_size", "screencast_keys_mouse_size",
- "screencast_keys_mouse_position", "screencast_keys_fade_time",
- "screencast_keys_pos_x", "screencast_keys_pos_y",
- "screencast_keys_box_draw", "screencast_keys_text_color",
- "screencast_keys_box_color", "screencast_keys_box_hide",
- "screencast_keys_box_width", "screencast_keys_show_operator",
- "screencast_keys_timer_show", "screencast_keys_timer_color",
- "screencast_keys_timer_size" ]
+ props = (
+ "screencast_keys_keys",
+ "screencast_keys_mouse",
+ "screencast_keys_font_size",
+ "screencast_keys_mouse_size",
+ "screencast_keys_mouse_position",
+ "screencast_keys_fade_time",
+ "screencast_keys_pos_x",
+ "screencast_keys_pos_y",
+ "screencast_keys_box_draw",
+ "screencast_keys_text_color",
+ "screencast_keys_box_color",
+ "screencast_keys_box_hide",
+ "screencast_keys_box_width",
+ "screencast_keys_show_operator",
+ "screencast_keys_timer_show",
+ "screencast_keys_timer_color",
+ "screencast_keys_timer_size",
+ )
+
+ wm = bpy.context.window_manager
for p in props:
- if bpy.context.window_manager.get(p) != None:
- del bpy.context.window_manager[p]
- try:
- x = getattr(bpy.types.WindowManager, p)
- del x
- except:
- pass
+ if p in wm:
+ del wm[p]
# defining the panel
@@ -840,28 +855,34 @@
OBJECT_PT_keys_status)
+# store keymaps here to access after registration
+addon_keymaps = []
+
+
def register():
init_properties()
for c in classes:
bpy.utils.register_class(c)
- kc = bpy.context.window_manager.keyconfigs.addon
+ wm = bpy.context.window_manager
+ kc = wm.keyconfigs.addon
if kc:
km = kc.keymaps.new(name='3D View', space_type='VIEW_3D')
kmi = km.keymap_items.new('view3d.screencast_keys', 'C', 'PRESS', shift=True, alt=True)
+ addon_keymaps.append((km, kmi))
def unregister():
+ # incase its enabled
+ ScreencastKeysStatus.handle_remove(bpy.context)
+
for c in classes:
bpy.utils.unregister_class(c)
- kc = bpy.context.window_manager.keyconfigs.addon
- if kc:
- km = kc.keymaps['3D View']
- for item in km.keymap_items:
- if item.idname == 'view3d.screencast_keys':
- km.keymap_items.remove(item)
- break
+ # handle the keymap
+ for km, kmi in addon_keymaps:
+ km.keymap_items.remove(kmi)
+ addon_keymaps.clear()
clear_properties()
More information about the Bf-extensions-cvs
mailing list