diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-05-06 11:30:21 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-05-06 11:30:21 +0200 |
| commit | 11563f3b62be60d443bcbcd33d02555ef6aa1ba5 (patch) | |
| tree | 0d1f8cadea8e5d54d23855b6d3df4f2ff6d4c462 /src | |
| parent | ff566e81160d8d395695d3e39a2bec5909f08fdd (diff) | |
| download | box64-11563f3b62be60d443bcbcd33d02555ef6aa1ba5.tar.gz box64-11563f3b62be60d443bcbcd33d02555ef6aa1ba5.zip | |
[BOX32][WRAPPER] Fix wrapping of XGetKeyboardMapping return (for #2135)
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibx11types32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibx11.c | 13 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibx11_private.h | 2 |
6 files changed, 22 insertions, 5 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index 823ac6e2..54d47361 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -1140,7 +1140,6 @@ #() pFpppp -> pFpppp #() pFXiii -> pFXiii #() pFXiip -> pFXiip -#() pFXCip -> pFXCip #() pFXLpp -> pFXLpp #() pFXppp -> pFXppp #() vFuibp_i -> vFuiBi @@ -1453,6 +1452,7 @@ #() pFEpnuu -> pFEpnuu #() pFEpnup -> pFEpnup #() pFEXipp -> pFEXipp +#() pFEXCip -> pFEXCip #() pFEXlpp -> pFEXlpp #() pFEXpip -> pFEXpip #() pFEXppi -> pFEXppi @@ -2916,6 +2916,8 @@ wrappedlibx11: - XIfEvent - LFXLpi: - XCreateColormap +- pFXCip: + - XGetKeyboardMapping - pFXlpp: - XGetVisualInfo - pFXpip: diff --git a/src/wrapped32/generated/wrappedlibx11types32.h b/src/wrapped32/generated/wrappedlibx11types32.h index fbf30c42..7010fee2 100644 --- a/src/wrapped32/generated/wrappedlibx11types32.h +++ b/src/wrapped32/generated/wrappedlibx11types32.h @@ -52,6 +52,7 @@ typedef int32_t (*iFXLpp_t)(void*, uintptr_t, void*, void*); typedef int32_t (*iFXpii_t)(void*, void*, int32_t, int32_t); typedef int32_t (*iFXppp_t)(void*, void*, void*, void*); typedef uintptr_t (*LFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef void* (*pFXCip_t)(void*, uint8_t, int32_t, void*); typedef void* (*pFXlpp_t)(void*, intptr_t, void*, void*); typedef void* (*pFXpip_t)(void*, void*, int32_t, void*); typedef int32_t (*iFXbpLiL_pp_t)(void*, struct_pLiL_t*, void*, void*); @@ -165,6 +166,7 @@ typedef uintptr_t (*LFXLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32 GO(XCheckIfEvent, iFXppp_t) \ GO(XIfEvent, iFXppp_t) \ GO(XCreateColormap, LFXLpi_t) \ + GO(XGetKeyboardMapping, pFXCip_t) \ GO(XGetVisualInfo, pFXlpp_t) \ GO(XListFonts, pFXpip_t) \ GO(XmbTextPropertyToTextList, iFXbpLiL_pp_t) \ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index ceb9cbab..28da1056 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1234,7 +1234,6 @@ typedef void* (*pFpppL_t)(void*, void*, void*, uintptr_t); typedef void* (*pFpppp_t)(void*, void*, void*, void*); typedef void* (*pFXiii_t)(void*, int32_t, int32_t, int32_t); typedef void* (*pFXiip_t)(void*, int32_t, int32_t, void*); -typedef void* (*pFXCip_t)(void*, uint8_t, int32_t, void*); typedef void* (*pFXLpp_t)(void*, uintptr_t, void*, void*); typedef void* (*pFXppp_t)(void*, void*, void*, void*); typedef void (*vFuibp_i_t)(uint32_t, int32_t, struct_p_t*, int32_t); @@ -1547,6 +1546,7 @@ typedef void* (*pFEppdd_t)(x64emu_t*, void*, void*, double, double); typedef void* (*pFEpnuu_t)(x64emu_t*, void*, void*, uint32_t, uint32_t); typedef void* (*pFEpnup_t)(x64emu_t*, void*, void*, uint32_t, void*); typedef void* (*pFEXipp_t)(x64emu_t*, void*, int32_t, void*, void*); +typedef void* (*pFEXCip_t)(x64emu_t*, void*, uint8_t, int32_t, void*); typedef void* (*pFEXlpp_t)(x64emu_t*, void*, intptr_t, void*, void*); typedef void* (*pFEXpip_t)(x64emu_t*, void*, void*, int32_t, void*); typedef void* (*pFEXppi_t)(x64emu_t*, void*, void*, void*, int32_t); @@ -3335,7 +3335,6 @@ void pFpppL_32(x64emu_t *emu, uintptr_t fcn) { pFpppL_t fn = (pFpppL_t)fcn; R_EA void pFpppp_32(x64emu_t *emu, uintptr_t fcn) { pFpppp_t fn = (pFpppp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFXiii_32(x64emu_t *emu, uintptr_t fcn) { pFXiii_t fn = (pFXiii_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } void pFXiip_32(x64emu_t *emu, uintptr_t fcn) { pFXiip_t fn = (pFXiip_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } -void pFXCip_32(x64emu_t *emu, uintptr_t fcn) { pFXCip_t fn = (pFXCip_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFXLpp_32(x64emu_t *emu, uintptr_t fcn) { pFXLpp_t fn = (pFXLpp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFXppp_32(x64emu_t *emu, uintptr_t fcn) { pFXppp_t fn = (pFXppp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } void vFuibp_i_32(x64emu_t *emu, uintptr_t fcn) { vFuibp_i_t fn = (vFuibp_i_t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } @@ -3648,6 +3647,7 @@ void pFEppdd_32(x64emu_t *emu, uintptr_t fcn) { pFEppdd_t fn = (pFEppdd_t)fcn; R void pFEpnuu_32(x64emu_t *emu, uintptr_t fcn) { pFEpnuu_t fn = (pFEpnuu_t)fcn; void *aligned_xcb = align_xcb_connection32(from_ptriv(R_ESP + 8)); R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), aligned_xcb, from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16))); unalign_xcb_connection32(aligned_xcb, from_ptriv(R_ESP + 8)); } void pFEpnup_32(x64emu_t *emu, uintptr_t fcn) { pFEpnup_t fn = (pFEpnup_t)fcn; void *aligned_xcb = align_xcb_connection32(from_ptriv(R_ESP + 8)); R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), aligned_xcb, from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); unalign_xcb_connection32(aligned_xcb, from_ptriv(R_ESP + 8)); } void pFEXipp_32(x64emu_t *emu, uintptr_t fcn) { pFEXipp_t fn = (pFEXipp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFEXCip_32(x64emu_t *emu, uintptr_t fcn) { pFEXCip_t fn = (pFEXCip_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXlpp_32(x64emu_t *emu, uintptr_t fcn) { pFEXlpp_t fn = (pFEXlpp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXpip_32(x64emu_t *emu, uintptr_t fcn) { pFEXpip_t fn = (pFEXpip_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } void pFEXppi_32(x64emu_t *emu, uintptr_t fcn) { pFEXppi_t fn = (pFEXppi_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index f763f645..aa5a762e 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -1181,7 +1181,6 @@ void pFpppL_32(x64emu_t *emu, uintptr_t fnc); void pFpppp_32(x64emu_t *emu, uintptr_t fnc); void pFXiii_32(x64emu_t *emu, uintptr_t fnc); void pFXiip_32(x64emu_t *emu, uintptr_t fnc); -void pFXCip_32(x64emu_t *emu, uintptr_t fnc); void pFXLpp_32(x64emu_t *emu, uintptr_t fnc); void pFXppp_32(x64emu_t *emu, uintptr_t fnc); void vFuibp_i_32(x64emu_t *emu, uintptr_t fnc); @@ -1494,6 +1493,7 @@ void pFEppdd_32(x64emu_t *emu, uintptr_t fnc); void pFEpnuu_32(x64emu_t *emu, uintptr_t fnc); void pFEpnup_32(x64emu_t *emu, uintptr_t fnc); void pFEXipp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXCip_32(x64emu_t *emu, uintptr_t fnc); void pFEXlpp_32(x64emu_t *emu, uintptr_t fnc); void pFEXpip_32(x64emu_t *emu, uintptr_t fnc); void pFEXppi_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibx11.c b/src/wrapped32/wrappedlibx11.c index acae4c87..43453a5e 100644 --- a/src/wrapped32/wrappedlibx11.c +++ b/src/wrapped32/wrappedlibx11.c @@ -1805,6 +1805,19 @@ EXPORT int my32_XRefreshKeyboardMapping(x64emu_t* emu, my_XMappingEvent_32_t* ev return my->XRefreshKeyboardMapping(&event); } +EXPORT void* my32_XGetKeyboardMapping(x64emu_t* emu, void* dpy, uint8_t first, int count, int* ret_count) +{ + unsigned long* ret = my->XGetKeyboardMapping(dpy, first, count, ret_count); + if(ret) { + //inplace reduction of ulong... + int cnt = count * *ret_count; + ulong_t* ret_s = (ulong_t*)ret; + for(int i=0; i<cnt; ++i) + ret_s[i] = to_ulong(ret[i]); + } + return ret; +} + EXPORT unsigned long my32_XLookupKeysym(x64emu_t* emu, my_XEvent_32_t* evt, int index) { my_XEvent_t event = {0}; diff --git a/src/wrapped32/wrappedlibx11_private.h b/src/wrapped32/wrappedlibx11_private.h index 1d762269..bb72250a 100644 --- a/src/wrapped32/wrappedlibx11_private.h +++ b/src/wrapped32/wrappedlibx11_private.h @@ -389,7 +389,7 @@ GOM(XGetImage, pFEXLiiuuLi) // return an XImage with callbacks that needs wr GOM(XGetIMValues, pFEpV) GO(XGetInputFocus, iFXBL_p) GO(XGetKeyboardControl, iFXbiiuuLip_) -GO(XGetKeyboardMapping, pFXCip) // return a KeySym*, so an unsigned long* +GOM(XGetKeyboardMapping, pFEXCip) // return a KeySym*, so an unsigned long* //GO(_XGetLCValues, GOM(XGetModifierMapping, pFEX) GOM(XGetMotionEvents, pFEXLLLp) |