branch: externals/xelb
commit c1d4e31abc7b9d1f8ff84231d285d73b39c5e0f3
Author: Chris Feng <chris.w.f...@gmail.com>
Commit: Chris Feng <chris.w.f...@gmail.com>

    Handle missing modifier keys when converting event to keysym
    
    * xcb-keysyms.el (xcb:keysyms:event->keysym): Return nil when any modifier
      key in the event is not present.
---
 xcb-keysyms.el |   32 +++++++++++++++++---------------
 1 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/xcb-keysyms.el b/xcb-keysyms.el
index f849bad..3b59238 100644
--- a/xcb-keysyms.el
+++ b/xcb-keysyms.el
@@ -363,21 +363,23 @@ This function returns nil when it fails to convert an 
event."
         (when (<= #x100 event #x10ffff) ;Unicode
           (setq keysym (+ #x1000000 event)))))
     (when keysym
-      `(,keysym
-        ;; state for KeyPress event
-        ,(apply #'logior
-                (mapcar (lambda (i)
-                          (pcase i
-                            (`meta xcb:keysyms:meta-mask)
-                            (`control xcb:keysyms:control-mask)
-                            (`shift xcb:keysyms:shift-mask)
-                            (`hyper xcb:keysyms:hyper-mask)
-                            (`super xcb:keysyms:super-mask)
-                            (`alt xcb:keysyms:alt-mask)
-                            (`down 0)
-                            ;; FIXME: more?
-                            (_ 0)))
-                        modifiers))))))
+      (setq modifiers
+            (mapcar (lambda (i)
+                      (pcase i
+                        (`meta xcb:keysyms:meta-mask)
+                        (`control xcb:keysyms:control-mask)
+                        (`shift xcb:keysyms:shift-mask)
+                        (`hyper xcb:keysyms:hyper-mask)
+                        (`super xcb:keysyms:super-mask)
+                        (`alt xcb:keysyms:alt-mask)
+                        (`down 0)
+                        ;; FIXME: more?
+                        (_ 0)))
+                    modifiers))
+      (unless (memq nil modifiers)
+        `(,keysym
+          ;; state for KeyPress event
+          ,(apply #'logior modifiers))))))
 
 (defun xcb:keysyms:keysym->event (keysym &optional mask allow-modifiers)
   "Translate X Keysym KEYSYM into Emacs key event.

Reply via email to