diff options
author | Chris Feng <chris.w.feng@gmail.com> | 2015-08-10T13·01+0800 |
---|---|---|
committer | Chris Feng <chris.w.feng@gmail.com> | 2015-08-10T13·01+0800 |
commit | 24b964bb4af100b959a33215cc91b9c896c9359e (patch) | |
tree | 266cfd121aa95ad33e0ea698109989e30c1750d2 | |
parent | 048994c7948528630b5c13f56dd22a9b2972e09c (diff) |
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.
-rw-r--r-- | exwm-input.el | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/exwm-input.el b/exwm-input.el index 24aa94abdaee..293fd670478f 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." |