about summary refs log tree commit diff stats
path: root/src/wrapped32/wrappedlibxi.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-13 15:24:03 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-13 15:24:11 +0100
commitfa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72 (patch)
tree74dacd24ef44f155a2b6f0ab517bfe25c2e48dc2 /src/wrapped32/wrappedlibxi.c
parent4b4c0143d951b6aa18e2102136b4b72e165459d4 (diff)
downloadbox64-fa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72.tar.gz
box64-fa3db3df11f0d10a4a46f5ec5b0aaeaf34656d72.zip
[BOX32][WRAPPER] Added a arge batch of 32bits wrapped function to X11 and friends
Diffstat (limited to 'src/wrapped32/wrappedlibxi.c')
-rw-r--r--src/wrapped32/wrappedlibxi.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/wrapped32/wrappedlibxi.c b/src/wrapped32/wrappedlibxi.c
index 570e2240..90ac4c33 100644
--- a/src/wrapped32/wrappedlibxi.c
+++ b/src/wrapped32/wrappedlibxi.c
@@ -99,4 +99,64 @@ EXPORT int my32_XGetDeviceButtonMapping(x64emu_t* emu, void* dpy, void* d, void*
     inplace_XDevice_shrink(d);
 }
 
+EXPORT void* my32_XQueryDeviceState(x64emu_t* emu, void* dpy, void* d)
+{
+    void* ret = inplace_XDeviceState_shrink(my->XQueryDeviceState(dpy, inplace_XDevice_enlarge(d)));
+    inplace_XDevice_shrink(d);
+    return ret;
+}
+
+EXPORT void my32_XFreeDeviceState(x64emu_t* emu, void* ds)
+{
+    my->XFreeDeviceState(inplace_XDeviceState_enlarge(ds));
+}
+
+EXPORT void* my32_XListInputDevices(x64emu_t* emu, void* dpy, int* n)
+{
+    return inplace_XDeviceInfo_shrink(my->XListInputDevices(dpy, n));
+}
+
+EXPORT void my32_XFreeDeviceList(x64emu_t* emu, void* l)
+{
+    my->XFreeDeviceList(inplace_XDeviceInfo_enlarge(l));
+}
+
+EXPORT void* my32_XGetDeviceMotionEvents(x64emu_t* emu, void* dpy, void* d, unsigned long start, unsigned long stop, int* n, int* mode, int* axis)
+{
+    void* ret = my->XGetDeviceMotionEvents(dpy, inplace_XDevice_enlarge(d), start, stop, n, mode, axis);
+    inplace_XDevice_shrink(d);
+    if(ret) {
+        my_XDeviceTimeCoord_t* src = ret;
+        my_XDeviceTimeCoord_32_t* dst = ret;
+        for(int i=0; i<*n; ++i) {
+            dst[i].time = to_ulong(src[i].time);
+            dst[i].data = to_ptrv(src[i].data);
+        }
+        if(*n) {
+            dst[*n].time = 0; dst[*n].data = 0; // mark the end
+        }
+    }
+}
+
+EXPORT void my32_XFreeDeviceMotionEvents(x64emu_t* emu, void* l)
+{
+    int n=0;
+    my_XDeviceTimeCoord_32_t* src = l;
+    my_XDeviceTimeCoord_t* dst = l;
+    // search length first
+    while(src[n].time || src[n].data) ++n;
+    for(int i=n; i>=0; --i) {
+        dst[i].data = from_ptrv(src[i].data);
+        dst[i].time = from_ulong(src[i].time);
+    }
+    my->XFreeDeviceMotionEvents(l);
+}
+
+EXPORT int my32_XGrabDevice(x64emu_t* emu, void* dpy, void* d, XID w, int owner, int count, void* evt, int this_mode, int other_modes, unsigned long time)
+{
+    int ret = my->XGrabDevice(dpy, inplace_XDevice_enlarge(d), w, owner, count, evt, this_mode, other_modes, time);
+    inplace_XDevice_shrink(d);
+    return ret;
+}
+
 #include "wrappedlib_init32.h"