diff --git a/collects/mred/private/wx/win32/frame.rkt b/collects/mred/private/wx/win32/frame.rkt index d1bc043248..356983603d 100644 --- a/collects/mred/private/wx/win32/frame.rkt +++ b/collects/mred/private/wx/win32/frame.rkt @@ -15,7 +15,8 @@ "window.rkt" "wndclass.rkt" "hbitmap.rkt" - "cursor.rkt") + "cursor.rkt" + "menu-item.rkt") (provide (protect-out frame% @@ -250,7 +251,10 @@ 0] [(and (= msg WM_COMMAND) (zero? (HIWORD wParam))) - (queue-window-event this (lambda () (on-menu-command (LOWORD wParam)))) + (let ([id (LOWORD wParam)]) + (let ([item (id-to-menu-item id)]) + (when item (send item auto-check))) + (queue-window-event this (lambda () (on-menu-command id)))) 0] [(= msg WM_INITMENU) (constrained-reply (get-eventspace) diff --git a/collects/mred/private/wx/win32/menu-item.rkt b/collects/mred/private/wx/win32/menu-item.rkt index ad2863fc88..1f0bcd7882 100644 --- a/collects/mred/private/wx/win32/menu-item.rkt +++ b/collects/mred/private/wx/win32/menu-item.rkt @@ -67,6 +67,10 @@ (let ([s (GetMenuState hmenu pos MF_BYPOSITION)]) (not (zero? (bitwise-and s MF_CHECKED))))) + (define/public (auto-check) + (when checkable? + (send parent auto-check id))) + (public [get-id id]) (define (get-id) id) diff --git a/collects/mred/private/wx/win32/menu.rkt b/collects/mred/private/wx/win32/menu.rkt index 783e37bb4a..66205b4c09 100644 --- a/collects/mred/private/wx/win32/menu.rkt +++ b/collects/mred/private/wx/win32/menu.rkt @@ -126,6 +126,12 @@ (lambda (i pos) (send i get-check hmenu pos)))) + (define/public (auto-check id) + (with-item + id + (lambda (i pos) + (send i set-check hmenu pos (not (send i get-check hmenu pos)))))) + (define/private (remove-item! pos) (set! items (append (take items pos)