about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorLeslie Zhai <zhaixiang@loongson.cn>2025-07-04 14:49:35 +0800
committerGitHub <noreply@github.com>2025-07-04 08:49:35 +0200
commit549b384c3c203bc949d86ff73e0134f6973e1e0a (patch)
treead376989019338974f725c71fa0b7b3708bcf53e /src
parent60ea78729dcda6f0e779f9b8f0f293ed77abaa7b (diff)
downloadbox64-549b384c3c203bc949d86ff73e0134f6973e1e0a.tar.gz
box64-549b384c3c203bc949d86ff73e0134f6973e1e0a.zip
[WRAPPER] Add bridge for Display's resource_alloc when directly call (#2795)
XOpenIM but not XOpenDisplay
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappedlibx11types.h2
-rw-r--r--src/wrapped/wrappedlibx11.c16
-rw-r--r--src/wrapped/wrappedlibx11_private.h2
4 files changed, 21 insertions, 1 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 647db685..47de184f 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -5480,6 +5480,8 @@ wrappedlibx11:
   - XCheckIfEvent
   - XIfEvent
   - XPeekIfEvent
+- pFpppp:
+  - XOpenIM
 - iFppppp:
   - XQueryExtension
 - iFpppppp:
diff --git a/src/wrapped/generated/wrappedlibx11types.h b/src/wrapped/generated/wrappedlibx11types.h
index 9dcdacec..b1eb5191 100644
--- a/src/wrapped/generated/wrappedlibx11types.h
+++ b/src/wrapped/generated/wrappedlibx11types.h
@@ -24,6 +24,7 @@ typedef int32_t (*iFppp_t)(void*, void*, void*);
 typedef void* (*pFpip_t)(void*, int32_t, void*);
 typedef void* (*pFpCL_t)(void*, uint8_t, uintptr_t);
 typedef int32_t (*iFpppp_t)(void*, void*, void*, void*);
+typedef void* (*pFpppp_t)(void*, void*, void*, void*);
 typedef int32_t (*iFppppp_t)(void*, void*, void*, void*, void*);
 typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*);
 typedef void* (*pFpLiiuuLi_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t);
@@ -57,6 +58,7 @@ typedef uintptr_t (*LFpLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32
 	GO(XCheckIfEvent, iFpppp_t) \
 	GO(XIfEvent, iFpppp_t) \
 	GO(XPeekIfEvent, iFpppp_t) \
+	GO(XOpenIM, pFpppp_t) \
 	GO(XQueryExtension, iFppppp_t) \
 	GO(XRegisterIMInstantiateCallback, iFpppppp_t) \
 	GO(XUnregisterIMInstantiateCallback, iFpppppp_t) \
diff --git a/src/wrapped/wrappedlibx11.c b/src/wrapped/wrappedlibx11.c
index d60f49b3..02c135ce 100644
--- a/src/wrapped/wrappedlibx11.c
+++ b/src/wrapped/wrappedlibx11.c
@@ -1646,6 +1646,22 @@ EXPORT uintptr_t my_XCreateWindow(x64emu_t* emu, my_XDisplay_t* dpy, uintptr_t v
     return ret;
 }
 
+EXPORT void* my_XOpenIM(x64emu_t* emu, my_XDisplay_t* dpy, void* v2, void* v3, void* v4)
+{
+    void* ret = my->XOpenIM(dpy, v2, v3, v4);
+    bridge_t* system = emu->context->system;
+
+    #define GO(A, W)\
+    if(dpy->A)      \
+        if(!CheckBridged(system, dpy->A)) \
+            AddAutomaticBridge(system, W, dpy->A, 0, #A); \
+
+    GO(resource_alloc, LFp)
+    #undef GO
+
+    return ret;
+}
+
 #define CUSTOM_INIT                 \
     AddAutomaticBridge(lib->w.bridge, vFp, *(void**)dlsym(lib->w.lib, "_XLockMutex_fn"), 0, "_XLockMutex_fn"); \
     AddAutomaticBridge(lib->w.bridge, vFp, *(void**)dlsym(lib->w.lib, "_XUnlockMutex_fn"), 0, "_XUnlockMutex_fn"); \
diff --git a/src/wrapped/wrappedlibx11_private.h b/src/wrapped/wrappedlibx11_private.h
index c965b16f..fadff97a 100644
--- a/src/wrapped/wrappedlibx11_private.h
+++ b/src/wrapped/wrappedlibx11_private.h
@@ -933,7 +933,7 @@ GO(XOffsetRegion, iFpii)
 //GO(_XomInitConverter, 
 GO(XOMOfOC, pFp)
 GOM(XOpenDisplay, pFEp)
-GO(XOpenIM, pFpppp)
+GOM(XOpenIM, pFEpppp)
 //GO(_XOpenLC, 
 GO(XOpenOM, pFpppp)
 //GO(_XParseBaseFontNameList,