Hans Leidekker : winex11.drv: Set HKCU\Keyboard Layout\Preload key.
Alexandre Julliard
julliard at winehq.org
Tue Apr 14 16:00:03 CDT 2009
Module: wine
Branch: master
Commit: 67a11c60afe77aa8dff6380b75e947fcf606589c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=67a11c60afe77aa8dff6380b75e947fcf606589c
Author: Hans Leidekker <hans at codeweavers.com>
Date: Tue Apr 14 12:35:28 2009 +0200
winex11.drv: Set HKCU\Keyboard Layout\Preload key.
---
dlls/winex11.drv/keyboard.c | 66 +++++++++++++++++++++++++++++-------------
1 files changed, 45 insertions(+), 21 deletions(-)
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index f7dad12..80f8445 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -44,6 +44,7 @@
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
+#include "winreg.h"
#include "winnls.h"
#include "x11drv.h"
#include "wine/server.h"
@@ -1613,6 +1614,48 @@ static HKL get_locale_kbd_layout(void)
return (HKL)layout;
}
+/***********************************************************************
+ * GetKeyboardLayoutName (X11DRV.@)
+ */
+BOOL CDECL X11DRV_GetKeyboardLayoutName(LPWSTR name)
+{
+ static const WCHAR formatW[] = {'%','0','8','l','x',0};
+ DWORD layout;
+ LANGID langid;
+
+ layout = main_key_tab[kbd_layout].lcid;
+ /* see comment for get_locale_kbd_layout */
+ langid = PRIMARYLANGID(LANGIDFROMLCID(layout));
+ if (langid == LANG_CHINESE || langid == LANG_JAPANESE || langid == LANG_KOREAN)
+ layout |= 0xe001 << 16; /* FIXME */
+
+ sprintfW(name, formatW, layout);
+ TRACE("returning %s\n", debugstr_w(name));
+ return TRUE;
+}
+
+static void set_kbd_layout_preload_key(void)
+{
+ static const WCHAR preload[] =
+ {'K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','\\','P','r','e','l','o','a','d',0};
+ static const WCHAR one[] = {'1',0};
+
+ HKEY hkey;
+ WCHAR layout[KL_NAMELENGTH];
+
+ if (RegCreateKeyExW(HKEY_CURRENT_USER, preload, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL))
+ return;
+
+ if (!RegQueryValueExW(hkey, one, NULL, NULL, NULL, NULL))
+ {
+ RegCloseKey(hkey);
+ return;
+ }
+ if (X11DRV_GetKeyboardLayoutName(layout))
+ RegSetValueExW(hkey, one, 0, REG_SZ, (const BYTE *)layout, sizeof(layout));
+
+ RegCloseKey(hkey);
+}
/**********************************************************************
* X11DRV_InitKeyboard
@@ -1630,6 +1673,8 @@ void X11DRV_InitKeyboard( Display *display )
const char (*lkey)[MAIN_LEN][4];
char vkey_used[256] = { 0 };
+ set_kbd_layout_preload_key();
+
wine_tsx11_lock();
XDisplayKeycodes(display, &min_keycode, &max_keycode);
ksp = XGetKeyboardMapping(display, min_keycode,
@@ -1901,27 +1946,6 @@ HKL CDECL X11DRV_GetKeyboardLayout(DWORD dwThreadid)
/***********************************************************************
- * GetKeyboardLayoutName (X11DRV.@)
- */
-BOOL CDECL X11DRV_GetKeyboardLayoutName(LPWSTR name)
-{
- static const WCHAR formatW[] = {'%','0','8','l','x',0};
- DWORD layout;
- LANGID langid;
-
- layout = main_key_tab[kbd_layout].lcid;
- /* see comment for get_locale_kbd_layout */
- langid = PRIMARYLANGID(LANGIDFROMLCID(layout));
- if (langid == LANG_CHINESE || langid == LANG_JAPANESE || langid == LANG_KOREAN)
- layout |= 0xe001 << 16; /* FIXME */
-
- sprintfW(name, formatW, layout);
- TRACE("returning %s\n", debugstr_w(name));
- return TRUE;
-}
-
-
-/***********************************************************************
* LoadKeyboardLayout (X11DRV.@)
*/
HKL CDECL X11DRV_LoadKeyboardLayout(LPCWSTR name, UINT flags)
More information about the wine-cvs
mailing list