These callbacks and scopes are pretty nuts. They add a lot of additional lines of code (these param docs, the members storing them, the code calling them, etc), and limit the usage of this dialog (only one caller can listen for the callbacks, etc). Having them be optional also adds a bunch of complexity to the code with checks and such. Making these events would disconnect the caller from the dialog and allow the caller to pick what it was interested in listening to, reduce the number of lines of code in here, and make it easier to read.