NO! I spoke too soon. Registering a keyboard action (not listener, sorry) traps ESC so I can do something else and keep the dialog open, but if I try to manually dispose the dialog in the event handler, the old behavior comes back -- the event is propagated, despite numerous calls to consume()...