[IMM32] Rewrite ImmGetVirtualKey (#3889)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Mon, 9 Aug 2021 23:03:32 +0000 (08:03 +0900)
committerGitHub <noreply@github.com>
Mon, 9 Aug 2021 23:03:32 +0000 (08:03 +0900)
Implementing Japanese input. CORE-11700

dll/win32/imm32/imm.c

index 2e89bf4..7ae9094 100644 (file)
@@ -3130,25 +3130,22 @@ BOOL WINAPI ImmGetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos)
  */
 UINT WINAPI ImmGetVirtualKey(HWND hWnd)
 {
-  OSVERSIONINFOA version;
-  InputContextData *data = ImmGetContext( hWnd );
-  TRACE("%p\n", hWnd);
-
-  if ( data )
-      return data->lastVK;
-
-  version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
-  GetVersionExA( &version );
-  switch(version.dwPlatformId)
-  {
-  case VER_PLATFORM_WIN32_WINDOWS:
-      return VK_PROCESSKEY;
-  case VER_PLATFORM_WIN32_NT:
-      return 0;
-  default:
-      FIXME("%d not supported\n",version.dwPlatformId);
-      return VK_PROCESSKEY;
-  }
+    HIMC hIMC;
+    LPINPUTCONTEXTDX pIC;
+    UINT ret = VK_PROCESSKEY;
+
+    TRACE("(%p)\n", hWnd);
+
+    hIMC = ImmGetContext(hWnd);
+    pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hIMC);
+    if (!pIC)
+        return ret;
+
+    if (pIC->bHasVKey)
+        ret = pIC->nVKey;
+
+    ImmUnlockIMC(hIMC);
+    return ret;
 }
 
 /***********************************************************************