Hmm. It's usually best if we can avoid using capture. In your case you have a button in buttonTable that is registered in the values ObjectMap, so normally the press is handled in Dialog#result(), not the button's own listener. If you were using result() you would have the same problem even if we use capture, because the dialog isn't hidden until after result(). It seems that since capture doesn't help in this case, we shouldn't use it. Instead I would suggest:

1) Add the button using the button() convenience methods and handle the press in result(), but call hide() before opening the next dialog.

OR

2) Add the button to buttonTable yourself, then in your button's change (or click) listener, hide the dialog, then open the new dialog.

If one of these works, can you remove capture and I'll merge the rest?