On Wed, 13 Sep 2023 15:52:43 GMT, Martin Fox <d...@openjdk.org> wrote:

>> This replaces obsolete XIM and uses gtk api for IME.
>> Gtk uses [ibus](https://github.com/ibus/ibus)
>> 
>> Gtk3+ uses relative positioning (as Wayland does), so I've added a Relative 
>> positioning on `InputMethodRequest`.
>> 
>> [Screencast from 03-09-2023 
>> 19:10:36.webm](https://github.com/openjdk/jfx/assets/30704286/2a36e9d0-59be-4092-905f-e31fabc6e2e4)
>
> modules/javafx.graphics/src/main/native-glass/gtk/glass_window_ime.cpp line 
> 91:
> 
>> 89: void WindowContextBase::commitIME(gchar *str) {
>> 90:     if (!im_ctx.on_preedit) {
>> 91:         jchar key = g_utf8_get_char(str);
> 
> This block is trying to set up calls to View.notifyKey. To get the correct 
> KeyCode requires information in the original GdkEventKey like the hardware 
> code and modifier state (for handling Num Lock on the key pad). The simplest 
> solution is to record a pointer to the original GdkEventKey before calling 
> `gtk_im_context_filter_keypress` and here pass that pointer to `process_key`. 
> It will get the KeyCode right and generate the appropriate View.notifyKey 
> calls.
> 
> (In theory another approach is to ignore the commit and return 'false' from 
> filterIME so the original GdkEvent isn't filtered. I tried that but it turned 
> into a mess because I was seeing two key press events for every keystroke. 
> `gtk_im_context_filter_keypress` filters out the original key press event 
> without generating a commit. Instead it posts a duplicate event with a 
> private modifier flag set and the commit signal is sent out when that second 
> event is passed to `gtk_im_context_filter_keypress`.)

I think the correct way is to generate a new gdk event. If I understood 
correctly, it's what gtk does 
[internally](https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gtk/gtkimcontextsimple.c).
 I will experiment with that.

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1080#discussion_r1324816395

Reply via email to