diff --git a/collects/mred/private/wx/cocoa/menu-item.rkt b/collects/mred/private/wx/cocoa/menu-item.rkt index 5495e00e..672a2b7c 100644 --- a/collects/mred/private/wx/cocoa/menu-item.rkt +++ b/collects/mred/private/wx/cocoa/menu-item.rkt @@ -1,15 +1,14 @@ -#lang scheme/base -(require scheme/class - scheme/foreign - ffi/objc +#lang racket/base +(require racket/class + ffi/unsafe + ffi/unsafe/objc "../../syntax.rkt" "utils.rkt" "types.rkt" "const.rkt") -(unsafe!) -(objc-unsafe!) -(provide menu-item%) +(provide menu-item% + set-menu-item-shortcut) (import-class NSMenuItem) @@ -73,25 +72,28 @@ (tellv item setAction: #:type _SEL (if checkable? (selector selectedCheckable:) (selector selected:))) - (let ([shortcut (regexp-match #rx"\tCut=(.)(.*)" label)]) - (when shortcut - (let* ([s (string-downcase (string (integer->char (string->number (caddr shortcut)))))] - [flags (- (char->integer (string-ref (cadr shortcut) 0)) - (char->integer #\A))] - [mods (+ (if (positive? (bitwise-and flags 1)) - NSShiftKeyMask - 0) - (if (positive? (bitwise-and flags 2)) - NSAlternateKeyMask - 0) - (if (positive? (bitwise-and flags 4)) - NSControlKeyMask - 0) - (if (positive? (bitwise-and flags 8)) - 0 - NSCommandKeyMask))]) - (tellv item setKeyEquivalent: #:type _NSString s) - (tellv item setKeyEquivalentModifierMask: #:type _NSUInteger mods)))) + (set-menu-item-shortcut item label) (release item)))) (super-new)) + +(define (set-menu-item-shortcut item label) + (let ([shortcut (regexp-match #rx"\tCut=(.)(.*)" label)]) + (when shortcut + (let* ([s (string-downcase (string (integer->char (string->number (caddr shortcut)))))] + [flags (- (char->integer (string-ref (cadr shortcut) 0)) + (char->integer #\A))] + [mods (+ (if (positive? (bitwise-and flags 1)) + NSShiftKeyMask + 0) + (if (positive? (bitwise-and flags 2)) + NSAlternateKeyMask + 0) + (if (positive? (bitwise-and flags 4)) + NSControlKeyMask + 0) + (if (positive? (bitwise-and flags 8)) + 0 + NSCommandKeyMask))]) + (tellv item setKeyEquivalent: #:type _NSString s) + (tellv item setKeyEquivalentModifierMask: #:type _NSUInteger mods))))) diff --git a/collects/mred/private/wx/cocoa/menu.rkt b/collects/mred/private/wx/cocoa/menu.rkt index 4cc2ca0a..7f9637eb 100644 --- a/collects/mred/private/wx/cocoa/menu.rkt +++ b/collects/mred/private/wx/cocoa/menu.rkt @@ -1,15 +1,14 @@ -#lang scheme/base -(require scheme/class - scheme/foreign +#lang racket/base +(require racket/class + ffi/unsafe + ffi/unsafe/objc (only-in scheme/list drop take) - ffi/objc "../common/event.rkt" "../../syntax.rkt" "utils.rkt" "types.rkt" - "window.rkt") -(unsafe!) -(objc-unsafe!) + "window.rkt" + "menu-item.rkt") (provide menu%) @@ -136,7 +135,8 @@ (define/public (set-label item label) (adjust item (lambda (item-cocoa) - (tellv item-cocoa setTitle: #:type _NSString (clean-menu-label label))) + (tellv item-cocoa setTitle: #:type _NSString (clean-menu-label (regexp-replace #rx"\t.*" label ""))) + (set-menu-item-shortcut item-cocoa label)) (lambda (mitem) (send (mitem-item mitem) set-label (clean-menu-label label)))))