diff options
author | David Bjergaard <dbjergaard@users.noreply.github.com> | 2017-01-12 12:43:19 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-12 12:43:19 -0500 |
commit | ad12b68e0e31311fe90658eabfdf94c1b420e768 (patch) | |
tree | c52f2af8c31005efa59613037bc297b87fb8b118 | |
parent | 53bc4eab3c559b624c5832e8d17ee59c264d259e (diff) | |
parent | 03e2ca353b79a8420f2ffa2a93aab19a14d65009 (diff) |
Merge pull request #304 from erjoalgo/masterv1.0.0
ensure a key's modifiers exist before grabbing it
-rw-r--r-- | window.lisp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/window.lisp b/window.lisp index bb87902..8c18751 100644 --- a/window.lisp +++ b/window.lisp @@ -683,10 +683,17 @@ and bottom_end_x." (let ((key (copy-structure key))) (setf (key-shift key) t) key)) + (key-modifiers-exist-p (key) + (and + (or (not (key-meta key)) (modifiers-meta *modifiers*)) + (or (not (key-alt key)) (modifiers-alt *modifiers*)) + (or (not (key-hyper key)) (modifiers-hyper *modifiers*)) + (or (not (key-super key)) (modifiers-super *modifiers*)))) (grabit (w key) - (loop for code in (multiple-value-list (xlib:keysym->keycodes *display* (key-keysym key))) do + (loop for code in (multiple-value-list (xlib:keysym->keycodes *display* (key-keysym key))) ;; some keysyms aren't mapped to keycodes so just ignore them. - (when code + when (and code (key-modifiers-exist-p key)) + do ;; Some keysyms, such as upper case letters, need the ;; shift modifier to be set in order to grab properly. (let ((key @@ -706,7 +713,7 @@ and bottom_end_x." :modifiers (x11-mods key t nil) :owner-p t :sync-pointer-p nil :sync-keyboard-p nil) (xlib:grab-key w code :modifiers (x11-mods key t t) :owner-p t - :sync-keyboard-p nil :sync-keyboard-p nil))))))) + :sync-keyboard-p nil :sync-keyboard-p nil)))))) (dolist (map (dereference-kmaps (top-maps group))) (dolist (i (kmap-bindings map)) (grabit win (binding-key i)))))) |