From: Matteo Bruni <mbruni@codeweavers.com> --- dlls/winex11.drv/keyboard.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c index e52a916b7f7..2c8ddf82114 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -72,6 +72,8 @@ struct layout int xkb_group; char *xkb_layout; + + LANGID lang; }; static const unsigned int ControlMask = 1 << 2; @@ -87,17 +89,17 @@ static struct list xkb_layouts = LIST_INIT( xkb_layouts ); static char KEYBOARD_MapDeadKeysym(KeySym keysym); #ifdef SONAME_LIBXKBREGISTRY -static void create_layout_from_xkb( int xkb_group, const char *xkb_layout ) +static void create_layout_from_xkb( int xkb_group, const char *xkb_layout, LANGID lang ) { struct layout *layout; - TRACE( "xkb_group %u, xkb_layout %s\n", xkb_group, xkb_layout ); + TRACE( "xkb_group %u, xkb_layout %s, lang %04x\n", xkb_group, xkb_layout, lang ); LIST_FOR_EACH_ENTRY( layout, &xkb_layouts, struct layout, entry ) { if (!strcmp( layout->xkb_layout, xkb_layout )) { - TRACE( "Found existing layout entry %p\n", layout ); + TRACE( "Found existing layout entry %p, lang %04x\n", layout, layout->lang ); if (layout->xkb_group == -1) layout->xkb_group = xkb_group; return; } @@ -113,7 +115,9 @@ static void create_layout_from_xkb( int xkb_group, const char *xkb_layout ) layout->xkb_group = xkb_group; layout->xkb_layout = strcpy( (char *)(layout + 1), xkb_layout ); - TRACE( "Created layout entry %p\n", layout ); + layout->lang = lang; + + TRACE( "Created layout entry %p, lang %04x\n", layout, layout->lang ); } #endif @@ -1672,7 +1676,7 @@ static BOOL init_xkb_layouts( Display *display, XkbDescRec *xkb_desc, unsigned i debugstr_a(layout), debugstr_a(variant), lang ); snprintf( buffer, ARRAY_SIZE(buffer), "%s:%s", layout, variant ); - create_layout_from_xkb( i, buffer ); + create_layout_from_xkb( i, buffer, lang ); } XFree( names[i] ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10779