Thanks, and thank you Martin for filing the issue https://bugs.openjdk.org/browse/JDK-8340982. I'll try to create an account on openjdk.org to be able to watch the issue :-).
Tangentially: For some reason mails on the openjfx-dev mailinglist coming from mar...@martinfox.com are not coming through to me. I only saw this thanks to Thiago's reply below (which prompted me to realize that I have missed Martin's mail). It's in the archives on https://mail.openjdk.org/pipermail/openjfx-dev/2024-September/thread.html alright, which is where I saw Martin's latest reply about filing the issue. It seems mails from m...@openjdk.org are coming through to me, but from mar...@martinfox.com not. Maybe some overzealous filtering by Gmail (not sure whether it's only an issue for me, or also for other gmail users). I'll try to investigate a bit more why gmail seems to be dropping these mails for me :-/. -- Johan On Wed, Sep 25, 2024 at 6:38 PM Thiago Milczarek Sayão < thiago.sa...@gmail.com> wrote: > Johan, > > Trust Martin, as I know nothing about Windows :) > Sorry for misleading you on the IME subject. > > Em qua., 25 de set. de 2024 às 13:24, Martin Fox <mar...@martinfox.com> > escreveu: > >> Johan, >> >> Thanks for providing all the details. It does sound like a bug. I will >> take a look. >> >> Since this is Windows altering the IME setup probably won’t have any >> effect. On Mac and Linux dead keys are delivered through the IME pathway >> and are presented to JavaFX as InputMethod events. On Windows dead keys >> don’t go through this pathway and are presented as KeyEvents. >> >> Martin >> >> On Sep 25, 2024, at 8:21 AM, Kevin Rushforth <kevin.rushfo...@oracle.com> >> wrote: >> >> I would not recommend internal APIs, unless someone wants to build JavaFX >> to help diagnose it. >> >> In any case it sounds like Johan has discovered a bug -- at least on >> Windows -- in the key handler for dead keys. We should test this on macOS >> and Linux as well. >> >> -- Kevin >> >> On 9/25/2024 8:14 AM, Thiago Milczarek Sayão wrote: >> >> Johan, >> >> It's an internal API, but we can use it for testing purposes (I'm not >> sure if there's a public API for that). >> SceneHelper.enableInputMethodEvents(scene, false); >> IME is used for entering complex characters in some languages such as >> Chinese, Korean, Japanese, etc. >> >> On Linux, setting the keyboard to en_US will also add the extra space, >> except if I choose the en_US with dead keys variation. >> >> If you try it on notepad, is it the same behaviour? If not, I think it >> might be a bug. >> >> -- Thiago. >> >> >> Em qua., 25 de set. de 2024 às 11:12, Johan Corveleyn <jcor...@gmail.com> >> escreveu: >> >>> Hi Thiago, >>> >>> Thank you for your answer. I am experiencing this issue on Windows >>> (Windows 10 and 11). >>> >>> Now, it dawns on me that: >>> - I have a QWERTY keyboard (standard US layout). >>> - I have my keyboard layout setting in Windows configured to "US >>> International". That way the keys for ~, ^, ', " become "dead keys" >>> (waiting for next keystroke). >>> - If I change my keyboard layout setting to "US" then I can't >>> reproduce anymore because those keystrokes no longer act like dead >>> keys (~, ^, ... immediately give that character). >>> >>> I don't know how this is handled on Linux or Mac. Do they also have >>> something like a "US International" keyboard layout setting so ^ >>> becomes a dead key? Or does it work differently if I want to type â or >>> ë, or a standalone ^? >>> >>> I'm not sure what you mean by disabling IME or how to know that it's >>> enabled. Can I enable/disable this programmatically in JavaFX? Or is >>> this an OS keyboard layout setting (anyway: just having a standard "US >>> input" makes this non reproducible because I can no longer type dead >>> keys)? >>> >>> If you have a keyboard input with dead keys it's super easy to test >>> this with a simple program like: >>> [[[ >>> public class DeadKeysFX extends Application { >>> @Override >>> public void start(Stage stage) { >>> TextField textField = new TextField(); >>> Scene scene = new Scene(textField); >>> stage.setScene(scene); >>> stage.show(); >>> } >>> } >>> ]]] >>> >>> Just type ^+<space> and see whether you get one or two characters. In >>> all non-JavaFX programs (including Java Swing) I get a single '^'. In >>> JavaFX I get a '^ '. >>> >>> -- >>> Johan >>> >>> On Tue, Sep 24, 2024 at 5:16 PM Thiago Milczarek Sayão >>> <thiago.sa...@gmail.com> wrote: >>> > >>> > Hi Johan, >>> > >>> > It might vary be platform. Which one are you using? (Windows, Mac, >>> Linux). >>> > >>> > Try disabling IME (Input Method Editor) and see it it works. >>> > >>> > - Thiago >>> > >>> > Em ter., 24 de set. de 2024 11:51, Johan Corveleyn <jcor...@gmail.com> >>> escreveu: >>> >> >>> >> Hi, >>> >> >>> >> (This is my first post here, hope I'm following the right path) >>> >> >>> >> It seems JavaFX TextFields (and friends) do not automatically convert >>> >> <dead key>+<space> into simply <dead key character>. They make it into >>> >> <dead key character>+<space>, which is very atypical. I would consider >>> >> this behavior a bug, since it is different from any editor I know (and >>> >> makes it very hard to enter a dead key character on its own). We ran >>> >> into this with Java 8, I also reproduced it with openjdk 21 + openjfx >>> >> 23. >>> >> >>> >> For instance if in a JavaFX TextField I type a '^' keystroke, it waits >>> >> for the next keystroke (which is normal since it's a dead key, >>> >> possibly followed by a character on which to put the '^'). But if I >>> >> then type <space> I expect a simple '^' to appear. Instead, in JavaFX, >>> >> '^ ' appears. This does not happen in Swing, nor in any editor or >>> >> shell or ... >>> >> >>> >> Background context: a user of our JavaFX application couldn't >>> >> authenticate with their password (typed in a PasswordField). After an >>> >> awful lot of troubleshooting we found that they used a '^' in their >>> >> password. Of course the user didn't notice that after typing ^+space >>> >> two dots appeared in the PasswordField. Now that user knows they have >>> >> to backspace after typing ^+space ... >>> >> >>> >> I suppose inserting a Swing JPasswordField in our JavaFX app would >>> >> work around this issue, but ... isn't there a better solution? >>> >> Shouldn't this be regarded as a bug? >>> >> >>> >> -- >>> >> Johan >>> >> >> >>