From 24b964bb4af100b959a33215cc91b9c896c9359e Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Mon, 10 Aug 2015 21:01:55 +0800 Subject: Ignore repeated `MappingNotify` events For some reason, `MappingNotify` events are generated quite frequently and greatly impact the performance. This commit disables the complete refresh of keyboard mapping. --- exwm-input.el | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'exwm-input.el') diff --git a/exwm-input.el b/exwm-input.el index 24aa94abda..293fd67047 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -139,13 +139,24 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.") (let ((obj (make-instance 'xcb:MappingNotify))) (xcb:unmarshal obj data) (with-slots (request first-keycode count) obj - (cond ((= request xcb:Mapping:Modifier) - ;; Modifier keys changed - (xcb:keysyms:update-modifier-mapping exwm--connection)) - ((= request xcb:Mapping:Keyboard) - ;; Only updated changed keys - (xcb:keysyms:update-keyboard-mapping exwm--connection - first-keycode count)))))) + (cond + ((= request xcb:Mapping:Modifier) + ;; Modifier keys changed + (exwm--log "Update modifier mapping") + (xcb:keysyms:update-modifier-mapping exwm--connection) + ) + ((= request xcb:Mapping:Keyboard) + ;; Only update changed keys + (with-slots (min-keycode max-keycode) + (xcb:get-setup exwm--connection) + ;; Since this operation is quite time-consuming, a complete refresh + ;; is forbidden as it's unlikely to bring any useful information + (unless (and (= min-keycode first-keycode) + (= max-keycode (+ first-keycode count -1))) + (exwm--log "Update keyboard mapping: %d ~ %d" + first-keycode (+ first-keycode count)) + (xcb:keysyms:update-keyboard-mapping exwm--connection + first-keycode count)))))))) (defun exwm-input--on-ButtonPress (data synthetic) "Handle ButtonPress event." -- cgit 1.4.1