From 95ac3c86f789d6514a3a6c6a2f16d28f7d6f0ea9 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sun, 8 Jan 2012 07:07:56 -0600 Subject: [PATCH] fixed bug in the way aug:keymap extracts the names now it should return only the canonical names of the keybindings (instead of potentially returning both the canonical and non-canonicalized names) --- collects/framework/private/keymap.rkt | 21 +++++++++------------ collects/tests/framework/keys.rkt | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/collects/framework/private/keymap.rkt b/collects/framework/private/keymap.rkt index 47e59ca4bb..c1014f9d8d 100644 --- a/collects/framework/private/keymap.rkt +++ b/collects/framework/private/keymap.rkt @@ -150,18 +150,15 @@ (get-map-function-table/ht (make-hasheq))) (define/public (get-map-function-table/ht table) - (hash-for-each - function-table - (λ (keyname fname) - (unless (hash-ref table keyname (λ () #f)) - (let ([cs (canonicalize-keybinding-string (format "~a" keyname))]) - (when (on-this-platform? cs) - (hash-set! table keyname fname)))))) - (for-each - (λ (chained-keymap) - (when (is-a? chained-keymap aug-keymap<%>) - (send chained-keymap get-map-function-table/ht table))) - chained-keymaps) + (for ([(keyname fname) (in-hash function-table)]) + (define cs (canonicalize-keybinding-string (format "~a" keyname))) + (define key (string->symbol cs)) + (unless (hash-ref table key #f) + (when (on-this-platform? cs) + (hash-set! table key fname)))) + (for ([chained-keymap (in-list chained-keymaps)]) + (when (is-a? chained-keymap aug-keymap<%>) + (send chained-keymap get-map-function-table/ht table))) table) (define/private (on-this-platform? cs) diff --git a/collects/tests/framework/keys.rkt b/collects/tests/framework/keys.rkt index 560d52ca1c..ef15679a60 100644 --- a/collects/tests/framework/keys.rkt +++ b/collects/tests/framework/keys.rkt @@ -58,6 +58,21 @@ (send k chain-to-keymap k1 #t) (hash-map (send k get-map-function-table) list))))) + (test + 'keymap:aug-keymap%/get-table/normalize-case + (lambda (x) + (equal? x '((|esc;p| "abc-k2")))) + (lambda () + (queue-sexp-to-mred + '(let ([k (make-object keymap:aug-keymap%)] + [k1 (make-object keymap:aug-keymap%)]) + (send k1 add-function "abc-k1" void) + (send k1 map-function "esc;p" "abc-k1") + (send k add-function "abc-k2" void) + (send k map-function "ESC;p" "abc-k2") + (send k chain-to-keymap k1 #t) + (hash-map (send k get-map-function-table) list))))) + (define (test-canonicalize name str1 str2) (test (string->symbol (format "keymap:canonicalize-keybinding-string/~a" name)) @@ -79,6 +94,7 @@ (test-canonicalize 10 ":d:a" "~a:~c:d:~m:~s:a") (test-canonicalize 11 "esc;s:a" "esc;s:a") (test-canonicalize 12 "s:a;esc" "s:a;esc") + (test-canonicalize 13 "ESC;p" "esc;p") ;; a key-spec is (make-key-spec buff-spec buff-spec (listof ?) (listof ?) (listof ?))