Check KEYSYMs converted from events

* exwm-input.el (exwm-input--update-global-prefix-keys)
  (exwm-input--fake-key, exwm-input--init): Check the return value of
  xcb:keysyms:event->keysym.
This commit is contained in:
Chris Feng 2015-10-28 20:38:06 +08:00
parent 34d588599d
commit 51f5e35aa6

View file

@ -261,7 +261,8 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
exwm--connection (car keysym)) exwm--connection (car keysym))
:pointer-mode xcb:GrabMode:Async :pointer-mode xcb:GrabMode:Async
:keyboard-mode xcb:GrabMode:Async))) :keyboard-mode xcb:GrabMode:Async)))
(user-error "[EXWM] Failed to grab key: %s" i)))))))) (user-error "[EXWM] Failed to grab key: %s"
(single-key-description i)))))))))
(defun exwm-input-set-key (key command) (defun exwm-input-set-key (key command)
"Set a global key binding." "Set a global key binding."
@ -392,9 +393,13 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
(defun exwm-input--fake-key (event) (defun exwm-input--fake-key (event)
"Fake a key event equivalent to Emacs event EVENT." "Fake a key event equivalent to Emacs event EVENT."
(let* ((keysym (xcb:keysyms:event->keysym event)) (let* ((keysym (xcb:keysyms:event->keysym event))
(keycode (xcb:keysyms:keysym->keycode exwm--connection (car keysym))) keycode id)
(id (exwm--buffer->id (window-buffer (selected-window))))) (unless keysym
(user-error "[EXWM] Invalid key: %s" (single-key-description event)))
(setq keycode (xcb:keysyms:keysym->keycode exwm--connection
(car keysym)))
(when keycode (when keycode
(setq id (exwm--buffer->id (window-buffer (selected-window))))
(dolist (class '(xcb:KeyPress xcb:KeyRelease)) (dolist (class '(xcb:KeyPress xcb:KeyRelease))
(xcb:+request exwm--connection (xcb:+request exwm--connection
(make-instance 'xcb:SendEvent (make-instance 'xcb:SendEvent
@ -472,6 +477,12 @@ SIMULATION-KEYS is a list of alist (key-sequence1 . key-sequence2)."
;; Convert move/resize buttons ;; Convert move/resize buttons
(let ((move-key (xcb:keysyms:event->keysym exwm-input-move-event)) (let ((move-key (xcb:keysyms:event->keysym exwm-input-move-event))
(resize-key (xcb:keysyms:event->keysym exwm-input-resize-event))) (resize-key (xcb:keysyms:event->keysym exwm-input-resize-event)))
(unless move-key
(user-error "[EXWM] Invalid key: %s"
(single-key-description exwm-input-move-event)))
(unless resize-key
(user-error "[EXWM] Invalid key: %s"
(single-key-description exwm-input-resize-event)))
(setq exwm-input--move-keysym (car move-key) (setq exwm-input--move-keysym (car move-key)
exwm-input--move-mask (cadr move-key) exwm-input--move-mask (cadr move-key)
exwm-input--resize-keysym (car resize-key) exwm-input--resize-keysym (car resize-key)