diff --git a/src/key-grab.scm b/src/key-grab.scm index 6d8a0cb..c15336a 100644 --- a/src/key-grab.scm +++ b/src/key-grab.scm @@ -89,22 +89,23 @@ (let* ((fwin (get-input-focus-window dpy)) ;; can be pointer-root and none (path (reverse (if (or (equal? fwin none) (equal? fwin pointer-root)) - '() + (list (default-root-window dpy)) (window-path dpy fwin)))) + ;; find all that match the first key and are registered for a + ;; window on the path (grabs (flatten - (filter - (lambda (x) x) - (map (lambda (win) - (filter - (lambda (grab) - (let ((first (car (key-grab:keys grab)))) - (and (equal? win (key-grab:window grab)) - (enum-set=? (key:modifiers first) - (key-event-state event)) - (equal? (key:keycode first) - (key-event-keycode event))))) - grabs)) - path)))) + (map (lambda (win) + (filter + (lambda (grab) + (let ((first (car (key-grab:keys grab)))) + (and (equal? win (key-grab:window grab)) + (enum-set=? (key:modifiers first) + (key-event-state event)) + (equal? (key:keycode first) + (key-event-keycode event))))) + grabs)) + path))) + ;; make an alist mapping a grab to the keys that are not entered (grabs-rests (map (lambda (g) (cons g (cdr (key-grab:keys g)))) grabs)) @@ -112,7 +113,6 @@ (let ((dones (map car (filter (lambda (grab-rest) (null? (cdr grab-rest))) grabs-rests)))) - (mdisplay "winner? dones: " dones "\n") (let loop ((dones dones)) (if (null? dones) #f @@ -129,7 +129,6 @@ dpy (default-root-window dpy) (event-mask key-press) (lambda (event-channel) (let loop ((grabs-rests grabs-rests)) - (mdisplay "grabs-rests: " grabs-rests "\n") (and (not (null? grabs-rests)) (or (winner? grabs-rests) (let ((e (receive event-channel)))