A function can be specified via the :enabled-function initarg (inherited from menu-object), that determines whether or not the menu, menu item, or menu component is enabled. By default, a menu object is always enabled.
Consider the following example:
(defvar *on* nil)
 
(contain
 (make-instance 'menu
                :items
                (list 
                 (make-instance 
                 'menu-item
                 :title "Foo"
                 :enabled-function 
                 #'(lambda (menu) *on*))
                (make-instance 
                 'menu-item
                 :title "Bar"))))
A menu with a disabled menu item
 
Changing the value of *on* between t and nil in the Listener, using setq, results in the menu item changing between the enabled and disabled states.
By default, items in the menu bar menus and sub-menus are disabled while a dialog is on the screen on top of the active window. You can override this by passing a suitable value for the menu-item initarg :enabled-function-for-dialog. 
CAPI User Guide and Reference Manual (Macintosh version) - 01 Dec 2021 19:31:20