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