summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bjergaard <dbjergaard@users.noreply.github.com>2017-01-12 12:43:19 -0500
committerGitHub <noreply@github.com>2017-01-12 12:43:19 -0500
commitad12b68e0e31311fe90658eabfdf94c1b420e768 (patch)
treec52f2af8c31005efa59613037bc297b87fb8b118
parent53bc4eab3c559b624c5832e8d17ee59c264d259e (diff)
parent03e2ca353b79a8420f2ffa2a93aab19a14d65009 (diff)
Merge pull request #304 from erjoalgo/masterv1.0.0
ensure a key's modifiers exist before grabbing it
-rw-r--r--window.lisp13
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))))))