Josh DuBois : wineandroid: Implement MapVirtualKeyEx.
Alexandre Julliard
julliard at winehq.org
Fri Jun 9 12:43:58 CDT 2017
Module: wine
Branch: master
Commit: 0d565d0118af1989c57fa27e831ac7815a05fe19
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0d565d0118af1989c57fa27e831ac7815a05fe19
Author: Josh DuBois <duboisj at codeweavers.com>
Date: Fri Jun 9 09:20:20 2017 +0200
wineandroid: Implement MapVirtualKeyEx.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wineandroid.drv/keyboard.c | 64 +++++++++++++++++++++++++++++++
dlls/wineandroid.drv/wineandroid.drv.spec | 1 +
2 files changed, 65 insertions(+)
diff --git a/dlls/wineandroid.drv/keyboard.c b/dlls/wineandroid.drv/keyboard.c
index 9afb73a..fb70445 100644
--- a/dlls/wineandroid.drv/keyboard.c
+++ b/dlls/wineandroid.drv/keyboard.c
@@ -36,6 +36,7 @@
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(keyboard);
+WINE_DECLARE_DEBUG_CHANNEL(key);
static const UINT keycode_to_vkey[] =
{
@@ -821,3 +822,66 @@ INT CDECL ANDROID_GetKeyNameText( LONG lparam, LPWSTR buffer, INT size )
TRACE( "lparam 0x%08x -> %s\n", lparam, debugstr_w( buffer ));
return len;
}
+
+
+/***********************************************************************
+ * ANDROID_MapVirtualKeyEx
+ */
+UINT CDECL ANDROID_MapVirtualKeyEx( UINT code, UINT maptype, HKL hkl )
+{
+ UINT ret = 0;
+ const char *s;
+
+ TRACE_(key)( "code=0x%x, maptype=%d, hkl %p\n", code, maptype, hkl );
+
+ switch (maptype)
+ {
+ case MAPVK_VK_TO_VSC_EX:
+ case MAPVK_VK_TO_VSC:
+ /* vkey to scancode */
+ switch (code)
+ {
+ case VK_SHIFT:
+ code = VK_LSHIFT;
+ break;
+ case VK_CONTROL:
+ code = VK_LCONTROL;
+ break;
+ case VK_MENU:
+ code = VK_LMENU;
+ break;
+ }
+ if (code < sizeof(vkey_to_scancode) / sizeof(vkey_to_scancode[0])) ret = vkey_to_scancode[code];
+ break;
+ case MAPVK_VSC_TO_VK:
+ case MAPVK_VSC_TO_VK_EX:
+ /* scancode to vkey */
+ ret = scancode_to_vkey( code );
+ if (maptype == MAPVK_VSC_TO_VK)
+ switch (ret)
+ {
+ case VK_LSHIFT:
+ case VK_RSHIFT:
+ ret = VK_SHIFT; break;
+ case VK_LCONTROL:
+ case VK_RCONTROL:
+ ret = VK_CONTROL; break;
+ case VK_LMENU:
+ case VK_RMENU:
+ ret = VK_MENU; break;
+ }
+ break;
+ case MAPVK_VK_TO_CHAR:
+ s = vkey_to_name( code );
+ if (s && (strlen( s ) == 1))
+ ret = s[0];
+ else
+ ret = 0;
+ break;
+ default:
+ FIXME( "Unknown maptype %d\n", maptype );
+ break;
+ }
+ TRACE_(key)( "returning 0x%04x\n", ret );
+ return ret;
+}
diff --git a/dlls/wineandroid.drv/wineandroid.drv.spec b/dlls/wineandroid.drv/wineandroid.drv.spec
index 4e7815a..89ec528 100644
--- a/dlls/wineandroid.drv/wineandroid.drv.spec
+++ b/dlls/wineandroid.drv/wineandroid.drv.spec
@@ -5,6 +5,7 @@
# USER driver
@ cdecl GetKeyNameText(long ptr long) ANDROID_GetKeyNameText
+@ cdecl MapVirtualKeyEx(long long long) ANDROID_MapVirtualKeyEx
@ cdecl ToUnicodeEx(long long ptr ptr long long long) ANDROID_ToUnicodeEx
@ cdecl EnumDisplayMonitors(long ptr ptr long) ANDROID_EnumDisplayMonitors
@ cdecl GetMonitorInfo(long ptr) ANDROID_GetMonitorInfo
More information about the wine-cvs
mailing list