about summary refs log tree commit diff stats
path: root/src/wrapped32/wrappedlibx11.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-14 17:04:17 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-14 17:04:17 +0100
commit2a33cf4e609a8fa1418d2f8f03b271cc0e40080f (patch)
tree52a6d3d1eb78dcc3d17ba3fbbee6a27c6346c7d4 /src/wrapped32/wrappedlibx11.c
parent6698a844f60752285372e091ad7912c6074a2c41 (diff)
downloadbox64-2a33cf4e609a8fa1418d2f8f03b271cc0e40080f.tar.gz
box64-2a33cf4e609a8fa1418d2f8f03b271cc0e40080f.zip
[BOX32][WRAPPER] Many fixes and improvments to X11 wrapping
Diffstat (limited to 'src/wrapped32/wrappedlibx11.c')
-rw-r--r--src/wrapped32/wrappedlibx11.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/wrapped32/wrappedlibx11.c b/src/wrapped32/wrappedlibx11.c
index a2aac6b1..014aa35f 100644
--- a/src/wrapped32/wrappedlibx11.c
+++ b/src/wrapped32/wrappedlibx11.c
@@ -1978,8 +1978,10 @@ EXPORT int my32_XGetWindowAttributes(x64emu_t* emu, void* dpy, XID window, my_XW
     my_XWindowAttributes_t l_attr = {0};
     int ret = my->XGetWindowAttributes(dpy, window, &l_attr);
     convert_XWindowAttributes_to_32(dpy, attr, &l_attr);
-    attr->screen = to_ptrv(&screen32);
-    convert_Screen_to_32(&screen32, l_attr.screen);
+    if(ret) {
+        attr->screen = to_ptrv(&screen32);
+        convert_Screen_to_32(&screen32, l_attr.screen);
+    }
     return ret;
 }
 
@@ -2251,8 +2253,13 @@ EXPORT void* my32_XGetVisualInfo(x64emu_t* emu, void* dpy, long mask, my_XVisual
 {
     my_XVisualInfo_t template_l = {0};
     if(template) convert_XVisualInfo_to_64_novisual(dpy, &template_l, template);
-    my_XVisualInfo_t* ret = my->XGetVisualInfo(dpy, mask, template?(&template_l):NULL, n);
-    inplace_XVisualInfo_shrink(dpy, ret);
+    void* ret = my->XGetVisualInfo(dpy, mask, template?(&template_l):NULL, n);
+    if(ret) {
+        my_XVisualInfo_t* src = ret;
+        my_XVisualInfo_32_t* dst = ret;
+        for(int i=0; i<*n; ++i)
+            convert_XVisualInfo_to_32(dpy, &dst[i], &src[i]);
+    }
     return ret;
 }
 
@@ -2653,6 +2660,13 @@ EXPORT int my32_XScreenNumberOfScreen(x64emu_t* emu, void* s)
     return my->XScreenNumberOfScreen(getScreen64(dpy, s));
 }
 
+EXPORT int my32__XReply(x64emu_t* emu, void* dpy, void* rep, int extra, int discard)
+{
+    int ret = my->_XReply(dpy, rep, extra, discard);
+    printf_log(LOG_DEBUG, " (reply type:%hhu, length:32+%u) ", *(uint8_t*)rep, ((uint32_t*)rep)[1]);
+    return ret;
+}
+
 #define CUSTOM_INIT                 \
     AddAutomaticBridge(lib->w.bridge, vFp_32, *(void**)dlsym(lib->w.lib, "_XLockMutex_fn"), 0, "_XLockMutex_fn"); \
     AddAutomaticBridge(lib->w.bridge, vFp_32, *(void**)dlsym(lib->w.lib, "_XUnlockMutex_fn"), 0, "_XUnlockMutex_fn"); \