By default, CAPI dialogs on Cocoa use sheets which are application-modal. This means that the application does not allow the user to interact with its other windows until the sheet is dismissed.
This section describes how to create CAPI dialogs which are window-modal on Cocoa. This is done with portable code, so Windows, GTK+ and Motif programmers may wish to code their CAPI dialogs as described in this section, which would ease a future port to the Cocoa GUI.
All CAPI dialog functions take a keyword argument continuation . This is a function which is called with the results of the dialog.
You do not need to construct the continuation argument yourself, but rather call the dialog function inside with-dialog-results.
To create a dialog which is window-modal on Cocoa, call the dialog function inside the macro with-dialog-results as in this example:
(with-dialog-results (symbol okp)
(prompt-for-symbol
"Enter a class-name symbol:"
:ok-check #'(lambda (symbol)
(find-class symbol nil)))
(when okp
(display-message "symbol is ~S" symbol))
)
On Microsoft Windows, GTK+ and Motif this displays the dialog, calls display-message when the user clicks OK , and then returns. The effect is no different to what you saw in Prompting for Lisp objects.
On Cocoa, this creates a sheet and returns. display-message is called when the user clicks OK . The sheet is window-modal, unlike the sheet you saw in Prompting for Lisp objects.
For more details, see the manual page for with-dialog-results.
CAPI User Guide and Reference Manual (Windows version) - 3 Aug 2017