On Sun, 17 Sep 2023 00:39:45 GMT, Thiago Milczarek Sayao <tsa...@openjdk.org> 
wrote:

>> 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 did change it, but probably need some more work.
> 
> I also discovered that I probably should use the `PANGO_ATTR_*` to set the 
> `IME_ATTR_*` with boundaries.

I did a simple logic that if filtered and commit is sent directly without a 
preedit it will send the event back to `process_key`. It seems to work but I'm 
not sure about an unknown complex scenario.

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

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

Reply via email to