From: Matteo Bruni <mbruni@codeweavers.com> --- dlls/winex11.drv/keyboard.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c index 2a8570fafb3..324a79f272d 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -1564,6 +1564,8 @@ void X11DRV_InitKeyboard( Display *display ) const char (*lkey)[MAIN_LEN][4]; char vkey_used[256] = { 0 }; XkbStateRec xkb_state; + char *group_names[4]; + unsigned int group_count = 0; /* Ranges of OEM, function key, and character virtual key codes. * Don't include those handled specially in X11DRV_ToUnicodeEx and @@ -1624,11 +1626,29 @@ void X11DRV_InitKeyboard( Display *display ) TRACE("min_keycode %u, max_keycode %u\n", min_keycode, max_keycode); xkb_desc = XkbGetMap( display, XkbAllClientInfoMask, XkbUseCoreKbd ); if (xkb_desc) + { TRACE("min_key_code %u, max_key_code %u\n", xkb_desc->min_key_code, xkb_desc->max_key_code); - XkbGetState( display, XkbUseCoreKbd, &xkb_state ); - xkb_current_group = xkb_state.group; - TRACE("xkb_current_group %u\n", xkb_current_group); + XkbGetState( display, XkbUseCoreKbd, &xkb_state ); + xkb_current_group = xkb_state.group; + TRACE("xkb_current_group %u\n", xkb_current_group); + + XkbGetNames( display, XkbGroupNamesMask, xkb_desc ); + for (i = 0; i < ARRAY_SIZE(xkb_desc->names->groups); i++) + { + if (!xkb_desc->names->groups[i]) + break; + } + group_count = i; + if (!XGetAtomNames( display, xkb_desc->names->groups, group_count, group_names )) + group_count = 0; + for (i = 0; i < group_count; i++) + { + TRACE("groups[%u] name %s\n", i, group_names[i]); + XFree( group_names[i] ); + } + XkbFreeNames( xkb_desc, XkbGroupNamesMask, True ); + } /* Detect the keyboard layout */ X11DRV_KEYBOARD_DetectLayout( display ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10550