Thiago, I’ve tested several modal dialogs on Mac, Windows, and Linux and in all but one ESC always dismisses the dialog. The only way for a user to back out an edit is to use Undo. The exception was the standard open file dialog on the Mac. In that dialog the Search field behaves the way you propose; the first ESC cancels editing and the second dismisses the dialog.
So I agree with Andy, you could just install a filter that catches ESC and unconditionally dismiss the dialog. That’s how most modal dialogs work. With that said I think we should implement what you propose; if there’s nothing to cancel ESC should be allowed to bubble. Just attaching a formatter to a field shouldn’t entirely disable the cancel button. In JavaFX events have to bubble all the way up to the scene to ensure the cancel and default buttons work correctly (which is an unusual design). This isn’t really an issue with the presence of the ESC binding but the way TextFieldBehavior implements cancelEdit (TextFieldBehavior:170) which consumes the event even if the text doesn’t change. Martin > On Nov 21, 2023, at 12:14 PM, Thiago Milczarek Sayão <thiago.sa...@gmail.com> > wrote: > > Andy, > > I think you're right about the formatter. > > The idea was to let the key propagate if there's nothing to cancel. > > For example: > If I want to cancel the edit, one ESC. The second ESC would propagate because > there's nothing to cancel. > > Thank you for the reply. > > > > Em ter., 21 de nov. de 2023 às 14:36, Andy Goryachev > <andy.goryac...@oracle.com <mailto:andy.goryac...@oracle.com>> escreveu: >> Dear Thiago: >> >> >> >> I don’t think it’s related to undo but to a TextField with a formatter. >> >> >> >> The question is - do you want to disable the standard behavior (updating the >> text using the formatter on ESCAPE) completely? Or perhaps you do want to >> let TextField invoke cancelEdit() (see TextInputControlBehavior:178) and >> then close the stage? >> >> >> >> In the latter case you might consider adding an event filter on the Stage >> and calling hide() from there in a Platform.runLater() >> >> >> >> What do you think? >> >> >> >> -andy >> >> >> >> >> >> From: openjfx-dev <openjfx-dev-r...@openjdk.org >> <mailto:openjfx-dev-r...@openjdk.org>> on behalf of Thiago Milczarek Sayão >> <thiago.sa...@gmail.com <mailto:thiago.sa...@gmail.com>> >> Date: Tuesday, November 21, 2023 at 02:37 >> To: openjfx-dev <openjfx-dev@openjdk.org <mailto:openjfx-dev@openjdk.org>> >> Subject: ESC key binding on the Scene >> >> Hi, >> >> >> >> I would like to use ESC to close Stages. The problem is that if the focus is >> on a TextField, it consumes the event. >> >> >> >> ESC is the key binding to Undo on the TextField, but it's always consumed, >> even if there's nothing to undo. >> >> >> >> Is this correct? Should it not propagate if there's nothing to undo? >> >> >> >> -- Thiago. >>