racket/gui keymap: adjust handling of 'control, etc., events

If a keymap has a grab, then discard key events that are modifier
changes or key releases.

Adjusts commit 8ba8d01ec0 so that Ctl-u work in DrRackt (and
other framework-based programs).

original commit: b3b9eb0eb4ea8ef4e97bde4b9799f92caf958737
This commit is contained in:
Matthew Flatt 2014-08-31 15:26:59 +02:00
parent 3dcb02a3fc
commit 44a704d123

View File

@ -138,7 +138,8 @@
get-best-score
chain-handle-mouse-event
get-best-mouse-score
cycle-check)
cycle-check
chain-check-grab)
(defclass keymap% object%
@ -462,7 +463,8 @@
(eq? code 'control)
(eq? code 'rcontrol)
(eq? code 'release))
prefixed?
(or prefixed?
(chain-check-grab obj event))
(let ([score (get-best-score
code
(send event get-other-shift-key-code)
@ -556,6 +558,11 @@
1
result)))))))))
(define/public (chain-check-grab obj event)
(or (and grab-key-function #t)
(for/or ([c (in-list chain-to)])
(send c chain-check-grab obj event))))
(def/public (set-grab-mouse-function [(make-procedure 4) grab])
(set! grab-mouse-function grab))