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