dialogs: split callbacks between interactive and non-interactive callbacks
this allows an application to manage error messages outside of the UI lifetime. For instance to store error messages before the UI is loaded and able to handle dialogs.
ref: #26378 (closed)