Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47439 Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/win32u/sysparams.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index c542de61451..81b64d1abf7 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -3117,11 +3117,12 @@ static union sysparam_all_entry * const default_entries[] =
void sysparams_init(void) { - DWORD i, dispos, dpi_scaling; WCHAR layout[KL_NAMELENGTH]; + char layoutA[KL_NAMELENGTH]; pthread_mutexattr_t attr; - HKEY hkey; + HKEY layout_key, hkey; + unsigned int hkl;
static const WCHAR software_wineW[] = {'S','o','f','t','w','a','r','e','\','W','i','n','e'}; static const WCHAR temporary_system_parametersW[] = @@ -3130,17 +3131,31 @@ void sysparams_init(void) static const WCHAR oneW[] = {'1',0}; static const WCHAR kl_preloadW[] = {'K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','\','P','r','e','l','o','a','d'}; + static const WCHAR keyboard_layoutsW[] = {'K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','s'};
pthread_mutexattr_init( &attr ); pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE ); pthread_mutex_init( &user_mutex, &attr ); pthread_mutexattr_destroy( &attr );
+ hkl = (ULONG_PTR)NtUserGetKeyboardLayout( 0 ); + if (HIWORD( hkl ) == LOWORD( hkl )) hkl = LOWORD( hkl ); + sprintf( layoutA, "%08X", hkl ); + asciiz_to_unicode( layout, layoutA ); + if ((hkey = reg_create_key( hkcu_key, kl_preloadW, sizeof(kl_preloadW), 0, NULL ))) { - if (NtUserGetKeyboardLayoutName( layout )) - set_reg_value( hkey, oneW, REG_SZ, (const BYTE *)layout, - (lstrlenW(layout) + 1) * sizeof(WCHAR) ); + set_reg_value( hkey, oneW, REG_SZ, (const BYTE *)layout, + (wcslen(layout) + 1) * sizeof(WCHAR) ); + NtClose( hkey ); + } + + if (!control_key) control_key = reg_create_key( NULL, control_keyW, sizeof(control_keyW), 0, NULL ); + + if ((hkey = reg_create_key( control_key, keyboard_layoutsW, sizeof(keyboard_layoutsW), 0, NULL ))) + { + if ((layout_key = reg_create_key( hkey, layout, wcslen( layout ) * sizeof(WCHAR), 0, NULL ))) + NtClose( layout_key ); NtClose( hkey ); }