Akihiro Sagawa : user32: Support Japanese keyboard type in GetKeyboardType.
Alexandre Julliard
julliard at winehq.org
Fri Aug 17 12:33:08 CDT 2018
Module: wine
Branch: master
Commit: c6d28c9399a4ef0a261d9e7604cdb9beb7b5edde
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c6d28c9399a4ef0a261d9e7604cdb9beb7b5edde
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Fri Aug 17 17:14:49 2018 +0900
user32: Support Japanese keyboard type in GetKeyboardType.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/input.c | 42 ++++++++++++++++++++++++++++++++----------
1 file changed, 32 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index c621769..1925998 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -917,18 +917,40 @@ DWORD WINAPI OemKeyScan( WORD oem )
INT WINAPI GetKeyboardType(INT nTypeFlag)
{
TRACE_(keyboard)("(%d)\n", nTypeFlag);
- switch(nTypeFlag)
+ if (LOWORD(GetKeyboardLayout(0)) == MAKELANGID(LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN))
{
- case 0: /* Keyboard type */
- return 4; /* AT-101 */
- case 1: /* Keyboard Subtype */
- return 0; /* There are no defined subtypes */
- case 2: /* Number of F-keys */
- return 12; /* We're doing an 101 for now, so return 12 F-keys */
- default:
- WARN_(keyboard)("Unknown type\n");
- return 0; /* The book says 0 here, so 0 */
+ /* scan code for `_', the key left of r-shift, in Japanese 106 keyboard */
+ const UINT JP106_VSC_USCORE = 0x73;
+
+ switch(nTypeFlag)
+ {
+ case 0: /* Keyboard type */
+ return 7; /* Japanese keyboard */
+ case 1: /* Keyboard Subtype */
+ /* Test keyboard mappings to detect Japanese keyboard */
+ if (MapVirtualKeyW(VK_OEM_102, MAPVK_VK_TO_VSC) == JP106_VSC_USCORE
+ && MapVirtualKeyW(JP106_VSC_USCORE, MAPVK_VSC_TO_VK) == VK_OEM_102)
+ return 2; /* Japanese 106 */
+ else
+ return 0; /* AT-101 */
+ case 2: /* Number of F-keys */
+ return 12; /* It has 12 F-keys */
+ }
+ }
+ else
+ {
+ switch(nTypeFlag)
+ {
+ case 0: /* Keyboard type */
+ return 4; /* AT-101 */
+ case 1: /* Keyboard Subtype */
+ return 0; /* There are no defined subtypes */
+ case 2: /* Number of F-keys */
+ return 12; /* We're doing an 101 for now, so return 12 F-keys */
+ }
}
+ WARN_(keyboard)("Unknown type\n");
+ return 0; /* The book says 0 here, so 0 */
}
/******************************************************************************
More information about the wine-cvs
mailing list