From 37098a400994948fe99a2bb944fc2c66e0c71b6a Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Mon, 5 Aug 2019 00:00:00 +0000 Subject: Fix detection of modifier keys in Emacs events * exwm-input.el (exwm-input--grab-global-prefix-keys) (exwm-input--fake-key): * exwm-xim.el (exwm-xim--handle-forward-event-request): X11 allows multiple combinations of KEYSYM-MODIFIERS to generate a same KEYSYM, thus the result of an Emacs event to KEYSYM-MODIFIERS conversion is not necessarily unique. Previously the result of `xcb:keysyms:event->keysym' is misused as the modifiers returned is actually the ones should be consumed. --- exwm-xim.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'exwm-xim.el') diff --git a/exwm-xim.el b/exwm-xim.el index 344f8c64cd..dc22f82fc4 100644 --- a/exwm-xim.el +++ b/exwm-xim.el @@ -530,7 +530,7 @@ The actual XIM request is in client message data or a property." (defun exwm-xim--handle-forward-event-request (req lsb conn client-xwin) (let ((im-func (with-current-buffer (window-buffer) input-method-function)) - key-event keysym event result) + key-event keysym keysyms event result) ;; Note: The flag slot is ignored. ;; Do conversion in client's byte-order. (let ((xcb:lsb lsb)) @@ -564,11 +564,11 @@ The actual XIM request is in client message data or a property." req (if raw-event (setq event raw-event) - (setq keysym (xcb:keysyms:event->keysym exwm-xim--conn event)) + (setq keysyms (xcb:keysyms:event->keysyms exwm-xim--conn event)) (with-slots (detail state) key-event (setf detail (xcb:keysyms:keysym->keycode exwm-xim--conn - (car keysym)) - state (cdr keysym))) + (caar keysyms)) + state (cdar keysyms))) (setq event (let ((xcb:lsb lsb)) (xcb:marshal key-event conn)))) (when event -- cgit 1.4.1