On Sun, 2 Apr 2023 23:36:27 GMT, Martin Fox <d...@openjdk.org> wrote:

>> @beldenfox Could you point out which tests were failing? 
>> `test.robot.javafx.embed.swing.SwingNodeJDialogTest` is getting stuck for me.
>
> @tsayao The best place to start is with the manual test that I added to PR 
> #425 (KeyboardTest.java). That test works on Windows, Mac, and Linux and uses 
> a Robot to throw a whole slew of platform key events at the system and then 
> verify that the right JavaFX KeyEvents come through on the other side.
> 
> The primary motivation for this PR is to pave the way for future PR's. 
> Accelerators involving punctuation and symbols aren't working at all well on 
> Linux (see [JDK-8273743](https://bugs.openjdk.org/browse/JDK-8273743)) and 
> having a working Robot in hand will be extremely helpful in testing the 
> fixes. The manual test in #425 can also be configured to test 
> KeyCharacterCombinations (the component that's broken) but for now you can 
> ignore all that.
> 
> Unfortunately the manual test itself is a big chunk of code that needs to be 
> reviewed but it is the first comprehensive test written for JavaFX keyboard 
> handling. I wish I could make it shorter (it looks more complicated than it 
> is) but the only way to test the keyboard system is to press a lot of keys.
> 
> BTW, the bot that kicked this PR has lousy timing. I'll be out of town for 
> most of the coming week and will be away from my Linux box.

@beldenfox I've done some research to understand your code. It seems 
`gdk_keymap_get_entries_for_keyval` will return multiple entries for hardware 
keys (as many as the layouts installed). So your change queries which one 
corresponds to the current layout. It seems correct to me, but I'll leave some 
suggestions.

To observe the problem using pure gdk:

#include <gdk/gdk.h>

int main(int argc, char *argv[]) {
    GdkKeymap *keymap;
    guint keyval = GDK_KEY_a;  // Example keyval
    guint upper_keyval = gdk_keyval_to_upper(keyval);
    GdkKeymapKey *keys;
    gint n_keys;
    gint group;

    // Initialize GDK
    gdk_init(&argc, &argv);

    // Get the default keymap
    keymap = gdk_keymap_get_for_display(gdk_display_get_default());

    // Get the keycodes for the uppercase character
    gdk_keymap_get_entries_for_keyval(keymap, upper_keyval, &keys, &n_keys);

    // Print the keycodes
    for (int i = 0; i < n_keys; i++) {
        printf("Keycode: %d\n", keys[i].keycode);
    }

    // Free resources
    g_free(keys);
    g_object_unref(keymap);

    return 0;
}



gcc -o testkey testkey.c `pkg-config --cflags --libs gdk-3.0`

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

PR Comment: https://git.openjdk.org/jfx/pull/718#issuecomment-1500719003

Reply via email to