branch: externals/xelb commit aac6a74e2f8a7b579eec3f526a874dfa38bde4c3 Author: Chris Feng <chris.w.f...@gmail.com> Commit: Chris Feng <chris.w.f...@gmail.com>
Temporarily disable update on every NewKeyboardNotify event * xcb-keysyms.el (xcb:keysyms:-on-NewKeyboardNotify): Only handle the first NewKeyboardNotify event (as a result of selecting that event). XELB is currently not efficient enough to handle every such event. --- xcb-keysyms.el | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/xcb-keysyms.el b/xcb-keysyms.el index 725d80d..881946e 100644 --- a/xcb-keysyms.el +++ b/xcb-keysyms.el @@ -48,7 +48,8 @@ ((keytypes :initform nil) (keycodes :initform nil) (min-keycode :initform 0) - (max-keycode :initform 0)) + (max-keycode :initform 0) + (updated :initform nil)) :documentation "Device (keyboard) properties.") ;; These variables are shared by all connections. @@ -153,16 +154,19 @@ This method must be called before using any other method in this module." (opcode (xcb:-get-extra-plist obj 'keysyms 'opcode)) (callback (xcb:-get-extra-plist obj 'keysyms 'callback)) (obj1 (make-instance 'xcb:xkb:NewKeyboardNotify)) - updated) + device updated) (xcb:unmarshal obj1 data) (with-slots (deviceID oldDeviceID requestMajor requestMinor changed) obj1 (if (= 0 (logand changed xcb:xkb:NKNDetail:DeviceID)) (when (/= 0 (logand changed xcb:xkb:NKNDetail:Keycodes)) - ;; (xcb:keysyms:-update-keytypes obj deviceID) - (xcb:keysyms:-update-keycodes obj deviceID) - (when (= deviceID device-id) - (setq updated t) - (xcb:keysyms:-update-modkeys obj deviceID))) + (setq device (xcb:-get-extra-plist obj 'keysyms deviceID)) + (when (and device + (not (slot-value device 'updated))) + (xcb:keysyms:-update-keycodes obj deviceID) + (when (= deviceID device-id) + (setq updated t) + (xcb:keysyms:-update-modkeys obj deviceID)) + (setf (slot-value device 'updated) t))) (xcb:keysyms:-set-per-client-flags obj deviceID) (xcb:keysyms:-update-keytypes obj deviceID) (xcb:keysyms:-update-keycodes obj deviceID)