From 5b674f087aa11bab2b1769ed6e1492a69aa59bf7 Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Mon, 17 Jun 2019 10:50:11 -0500 Subject: [PATCH] lsteamclient: Convert windows VK to xkeysym --- ...STEAMHTMLSURFACE_INTERFACE_VERSION_001.cpp | 2 + ...STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp | 2 + ...STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp | 2 + ...STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp | 2 + ...STEAMHTMLSURFACE_INTERFACE_VERSION_005.cpp | 2 + lsteamclient/gen_wrapper.py | 12 +- lsteamclient/steamclient_main.c | 143 ++++++++++++++++++ lsteamclient/steamclient_private.h | 1 + 8 files changed, 165 insertions(+), 1 deletion(-) diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001.cpp index 4dccdbde..1d2c49d3 100644 --- a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001.cpp +++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001.cpp @@ -94,11 +94,13 @@ void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001_MouseWheel(void void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_001_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp index e8de5aff..e17c6bd0 100644 --- a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp +++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002.cpp @@ -94,11 +94,13 @@ void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_MouseWheel(void void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_002_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp index e0ee0db1..179be3bc 100644 --- a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp +++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003.cpp @@ -94,11 +94,13 @@ void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_MouseWheel(void void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_003_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp index 74b049af..a89d9059 100644 --- a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp +++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004.cpp @@ -94,11 +94,13 @@ void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_MouseWheel(void void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_004_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } diff --git a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005.cpp b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005.cpp index d56ca361..66d6aad8 100644 --- a/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005.cpp +++ b/lsteamclient/cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005.cpp @@ -95,11 +95,13 @@ void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005_MouseWheel(void void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005_KeyDown(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers, bool bIsSystemKey) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyDown((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers, (bool)bIsSystemKey); } void cppISteamHTMLSurface_STEAMHTMLSURFACE_INTERFACE_VERSION_005_KeyUp(void *linux_side, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, EHTMLKeyModifiers eHTMLKeyModifiers) { + nNativeKeyCode = manual_convert_nNativeKeyCode(nNativeKeyCode); ((ISteamHTMLSurface*)linux_side)->KeyUp((HHTMLBrowser)unBrowserHandle, (uint32)nNativeKeyCode, (ISteamHTMLSurface::EHTMLKeyModifiers)eHTMLKeyModifiers); } diff --git a/lsteamclient/gen_wrapper.py b/lsteamclient/gen_wrapper.py index a13209f8..3d7ec5b2 100755 --- a/lsteamclient/gen_wrapper.py +++ b/lsteamclient/gen_wrapper.py @@ -181,6 +181,11 @@ manual_type_converters = [ "FSteamNetworkingSocketsDebugOutput" ] +# manual converters for specific parameters +manual_param_converters = [ + "nNativeKeyCode" +] + #struct_conversion_cache = { # '142': { # 'SteamUGCDetails_t': True, @@ -540,6 +545,8 @@ def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, e win_name = typename.replace(real_type.spelling, "win%s_%s" % (real_type.spelling, sdkver)) elif real_type.spelling in manual_type_converters: manual_convert.append(param) + elif param.spelling in manual_param_converters: + manual_convert.append(param) if param.spelling == "": cfile.write(", %s _%s" % (win_name, unnamed)) @@ -587,7 +594,10 @@ def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, e cpp.write(" %s lin_%s;\n" % (param.type.spelling, param.spelling)) cpp.write(" win_to_lin_struct_%s_%s(&%s, &lin_%s);\n" % (param.type.spelling, sdkver, param.spelling, param.spelling)) for param in manual_convert: - cpp.write(" %s = (%s)manual_convert_%s((void*)%s);\n" % (param.spelling, param.type.spelling, param.type.spelling, param.spelling)) + if param.spelling in manual_param_converters: + cpp.write(" %s = manual_convert_%s(%s);\n" % (param.spelling, param.spelling, param.spelling)) + else: + cpp.write(" %s = (%s)manual_convert_%s((void*)%s);\n" % (param.spelling, param.type.spelling, param.type.spelling, param.spelling)) cfile.write(" TRACE(\"%p\\n\", _this);\n") diff --git a/lsteamclient/steamclient_main.c b/lsteamclient/steamclient_main.c index 27858ae2..5db9fb1f 100644 --- a/lsteamclient/steamclient_main.c +++ b/lsteamclient/steamclient_main.c @@ -12,6 +12,10 @@ #include "wine/library.h" #include "steam_defs.h" +#ifdef __linux__ +#include +#endif + #include "steamclient_private.h" WINE_DEFAULT_DEBUG_CHANNEL(steamclient); @@ -173,6 +177,145 @@ const char *steamclient_isteamcontroller_getglyph(int origin, const char *lin_pa return controller_glyphs[origin]; } +#ifdef __linux__ +static const uint32 vk_to_xkeysym[0xFF] = { + 0, /* 0x0 Undefined */ + 0, /* VK_LBUTTON */ + 0, /* VK_RBUTTON */ + XK_Cancel, /* VK_CANCEL */ + 0, /* VK_MBUTTON */ + 0, /* VK_XBUTTON1 */ + 0, /* VK_XBUTTON2 */ + 0, /* 0x07 Undefined */ + XK_BackSpace, /* VK_BACK */ + XK_Tab, /* VK_TAB */ + 0, /* 0x0A-0x0B Undefined */ + 0, + XK_Clear, /* VK_CLEAR */ + XK_Return, /* VK_RETURN */ + 0, /* 0x0E-0x0F Undefined */ + 0, + XK_Shift_L, /* VK_SHIFT */ + XK_Control_L, /* VK_CONTROL */ + XK_Alt_L, /* VK_MENU */ + XK_Pause, /* VK_PAUSE */ + XK_Caps_Lock, /* VK_CAPITAL */ + 0, /* VK_KANA */ + 0, /* 0x16 Undefined */ + 0, /* VK_JUNJA */ + 0, /* VK_FINAL */ + 0, /* VK_HANJA */ + 0, /* 0x1A Undefined */ + XK_Escape, /* VK_ESCAPE */ + XK_Henkan_Mode, /* VK_CONVERT */ + XK_Muhenkan, /* VK_NONCONVERT */ + 0, /* VK_ACCEPT */ + 0, /* VK_MODECHANGE */ + ' ', /* VK_SPACE */ + XK_Prior, /* VK_PRIOR */ + XK_Next, /* VK_NEXT */ + XK_End, /* VK_END */ + XK_Home, /* VK_HOME */ + XK_Left, /* VK_LEFT */ + XK_Up, /* VK_UP */ + XK_Right, /* VK_RIGHT */ + XK_Down, /* VK_DOWN */ + XK_Select, /* VK_SELECT */ + XK_Print, /* VK_PRINT */ + XK_Execute, /* VK_EXECUTE */ + XK_Print, /* VK_SNAPSHOT */ + XK_Insert, /* VK_INSERT */ + XK_Delete, /* VK_DELETE */ + XK_Help, /* VK_HELP */ + + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 0, 0, 0, 0, 0, 0, 0, /* 0x3A-0x40 Undefined */ + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', + 'U', 'V', 'W', 'X', 'Y', 'Z', + + XK_Super_L, /* VK_LWIN */ + XK_Super_R, /* VK_RWIN */ + XK_Menu, /* VK_APPS */ + 0, /* 0x5E Unassigned */ + 0, /* VK_SLEEP */ + XK_KP_0, /* VK_NUMPAD0 */ + XK_KP_1, /* VK_NUMPAD1 */ + XK_KP_2, /* VK_NUMPAD2 */ + XK_KP_3, /* VK_NUMPAD3 */ + XK_KP_4, /* VK_NUMPAD4 */ + XK_KP_5, /* VK_NUMPAD5 */ + XK_KP_6, /* VK_NUMPAD6 */ + XK_KP_7, /* VK_NUMPAD7 */ + XK_KP_8, /* VK_NUMPAD8 */ + XK_KP_9, /* VK_NUMPAD9 */ + XK_KP_Multiply, /* VK_MULTIPLY */ + XK_KP_Add, /* VK_ADD */ + XK_KP_Separator, /* VK_SEPARATOR */ + XK_KP_Subtract, /* VK_SUBTRACT */ + XK_KP_Decimal, /* VK_DECIMAL */ + XK_KP_Divide, /* VK_DIVIDE */ + XK_F1, /* VK_F1 */ + XK_F2, /* VK_F2 */ + XK_F3, /* VK_F3 */ + XK_F4, /* VK_F4 */ + XK_F5, /* VK_F5 */ + XK_F6, /* VK_F6 */ + XK_F7, /* VK_F7 */ + XK_F8, /* VK_F8 */ + XK_F9, /* VK_F9 */ + XK_F10, /* VK_F10 */ + XK_F11, /* VK_F11 */ + XK_F12, /* VK_F12 */ + XK_F13, /* VK_F13 */ + XK_F14, /* VK_F14 */ + XK_F15, /* VK_F15 */ + XK_F16, /* VK_F16 */ + XK_F17, /* VK_F17 */ + XK_F18, /* VK_F18 */ + XK_F19, /* VK_F19 */ + XK_F20, /* VK_F20 */ + XK_F21, /* VK_F21 */ + XK_F22, /* VK_F22 */ + XK_F23, /* VK_F23 */ + XK_F24, /* VK_F24 */ + 0, /* VK_NAVIGATION_VIEW */ + 0, /* VK_NAVIGATION_MENU */ + 0, /* VK_NAVIGATION_UP */ + 0, /* VK_NAVIGATION_DOWN */ + 0, /* VK_NAVIGATION_LEFT */ + 0, /* VK_NAVIGATION_RIGHT */ + 0, /* VK_NAVIGATION_ACCEPT */ + 0, /* VK_NAVIGATION_CANCEL */ + XK_Num_Lock, /* VK_NUMLOCK */ + XK_Scroll_Lock, /* VK_SCROLL */ + XK_KP_Equal, /* VK_OEM_NEC_EQUAL */ + 0, /* VK_OEM_FJ_JISHO */ + 0, /* VK_OEM_FJ_MASSHOU */ + 0, /* VK_OEM_FJ_TOUROKU */ + 0, /* VK_OEM_FJ_LOYA */ + 0, /* VK_OEM_FJ_ROYA */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x97-0x9F Unassigned */ + XK_Shift_L, /* VK_LSHIFT */ + XK_Shift_R, /* VK_RSHIFT */ + XK_Control_L, /* VK_LCONTROL */ + XK_Control_R, /* VK_RCONTROL */ + XK_Alt_L, /* VK_LMENU */ + XK_Alt_R, /* VK_RMENU */ + + /* below are OEM, browser keys, etc */ +}; + +uint32 manual_convert_nNativeKeyCode(uint32 win_vk) +{ + if(win_vk < sizeof(vk_to_xkeysym) / sizeof(*vk_to_xkeysym)) + return vk_to_xkeysym[win_vk]; + return 0; +} +#else +#error You must implement VK<->Native keysym conversion for this platform. +#endif + #include "win_constructors.h" static const struct { diff --git a/lsteamclient/steamclient_private.h b/lsteamclient/steamclient_private.h index ac1101b6..7099359b 100644 --- a/lsteamclient/steamclient_private.h +++ b/lsteamclient/steamclient_private.h @@ -42,6 +42,7 @@ bool steamclient_dos_path_to_unix_path(const char *src, char *dst); const char **steamclient_dos_to_unix_stringlist(const char **src); void steamclient_free_stringlist(const char **out); const char *steamclient_isteamcontroller_getglyph(int origin, const char *lin_path); +uint32 manual_convert_nNativeKeyCode(uint32 win_vk); void *create_LinuxISteamMatchmakingServerListResponse(void *win, const char *version); void *create_LinuxISteamMatchmakingPingResponse(void *win, const char *version); void *create_LinuxISteamMatchmakingPlayersResponse(void *win, const char *version);