about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-06-12 19:41:06 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-06-12 19:41:06 +0200
commit8a85acff326bcef6cb42d2eae510d9094cf3fe4a (patch)
treed26e94dd1c9cc79ea90d9791a93fe5c2924a5af9 /src/wrapped
parentb450ea24a287ed99caef527f293758f834cb8e33 (diff)
downloadbox64-8a85acff326bcef6cb42d2eae510d9094cf3fe4a.tar.gz
box64-8a85acff326bcef6cb42d2eae510d9094cf3fe4a.zip
Better wrapping for libwayland-client, removed the x64 versions of the libs, using wrapped one instead
Diffstat (limited to 'src/wrapped')
-rw-r--r--src/wrapped/generated/functions_list.txt9
-rw-r--r--src/wrapped/generated/wrappedwaylandclienttypes.h4
-rw-r--r--src/wrapped/generated/wrapper.c11
-rw-r--r--src/wrapped/generated/wrapper.h5
-rw-r--r--src/wrapped/wrappedwaylandclient.c492
-rw-r--r--src/wrapped/wrappedwaylandclient_private.h14
6 files changed, 492 insertions, 43 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index db00a975..24aaa4e8 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -1738,6 +1738,7 @@
 #() pFpuuup
 #() pFpuupp
 #() pFpuLpp
+#() pFpuppu
 #() pFpuppp
 #() pFpUdii
 #() pFpfffi
@@ -2937,6 +2938,7 @@
 #() vFffffffffffff
 #() vFpipppiiiipii
 #() vFpippppiiiipi
+#() vFpupppppppppp
 #() vFppiiiiddddii
 #() vFppiiuuuiupup
 #() vFppiipppiiiii
@@ -3020,13 +3022,16 @@
 #() iFpppppppppppppppppp
 #() LFpppppppppppppppppp
 #() pFippppppppppppppppp
+#() pFpupppppppppppppppp
 #() vFpiiiiiiiiiiiiiiiiii
 #() uFbWWWCCCCCCCCWCCCCCC
 #() pFiiiippppppppppppppp
 #() pFpippppppppppppppppp
+#() pFpupupppppppppppppppp
 #() iFpppppppppppppppppppppp
 #() uFippuuuuiiiiuuiiiiiiiipp
 #() vFpppppppppppppppppppppppp
+#() pFpupuupppppppppppppppppppp
 #() iFpppppppppppppppppppppppppppppppppp
 #defined(HAVE_LD80BITS) DFD
 #defined(HAVE_LD80BITS) DFY
@@ -5649,6 +5654,10 @@ wrappedvulkan:
   - vkGetPhysicalDeviceSparseImageFormatProperties
 - vFpiiiupupup:
   - vkCmdPipelineBarrier
+wrappedwaylandclient:
+- iFppp:
+  - wl_proxy_add_listener
+wrappedwaylandcursor:
 wrappedwaylandegl:
 wrappedxinerama:
 wrappedxkbcommon:
diff --git a/src/wrapped/generated/wrappedwaylandclienttypes.h b/src/wrapped/generated/wrappedwaylandclienttypes.h
index bb9e3ff5..fe0f4d8e 100644
--- a/src/wrapped/generated/wrappedwaylandclienttypes.h
+++ b/src/wrapped/generated/wrappedwaylandclienttypes.h
@@ -11,7 +11,9 @@
 #define ADDED_FUNCTIONS() 
 #endif
 
+typedef int32_t (*iFppp_t)(void*, void*, void*);
 
-#define SUPER() ADDED_FUNCTIONS()
+#define SUPER() ADDED_FUNCTIONS() \
+	GO(wl_proxy_add_listener, iFppp_t)
 
 #endif // __wrappedwaylandclientTYPES_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index f92897b5..37fd5864 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -1776,6 +1776,7 @@ typedef void* (*pFpuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t);
 typedef void* (*pFpuuup_t)(void*, uint32_t, uint32_t, uint32_t, void*);
 typedef void* (*pFpuupp_t)(void*, uint32_t, uint32_t, void*, void*);
 typedef void* (*pFpuLpp_t)(void*, uint32_t, uintptr_t, void*, void*);
+typedef void* (*pFpuppu_t)(void*, uint32_t, void*, void*, uint32_t);
 typedef void* (*pFpuppp_t)(void*, uint32_t, void*, void*, void*);
 typedef void* (*pFpUdii_t)(void*, uint64_t, double, int32_t, int32_t);
 typedef void* (*pFpfffi_t)(void*, float, float, float, int32_t);
@@ -2975,6 +2976,7 @@ typedef void (*vFuuuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_
 typedef void (*vFffffffffffff_t)(float, float, float, float, float, float, float, float, float, float, float, float);
 typedef void (*vFpipppiiiipii_t)(void*, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t);
 typedef void (*vFpippppiiiipi_t)(void*, int32_t, void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t);
+typedef void (*vFpupppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void (*vFppiiiiddddii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, double, double, double, double, int32_t, int32_t);
 typedef void (*vFppiiuuuiupup_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uint32_t, void*);
 typedef void (*vFppiipppiiiii_t)(void*, void*, int32_t, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t);
@@ -3058,13 +3060,16 @@ typedef void (*vFpppipppppppppppppp_t)(void*, void*, void*, int32_t, void*, void
 typedef int32_t (*iFpppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef uintptr_t (*LFpppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void* (*pFippppppppppppppppp_t)(int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
+typedef void* (*pFpupppppppppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void (*vFpiiiiiiiiiiiiiiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
 typedef uint32_t (*uFbWWWCCCCCCCCWCCCCCC_t)(void*, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
 typedef void* (*pFiiiippppppppppppppp_t)(int32_t, int32_t, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef void* (*pFpippppppppppppppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
+typedef void* (*pFpupupppppppppppppppp_t)(void*, uint32_t, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef int32_t (*iFpppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef uint32_t (*uFippuuuuiiiiuuiiiiiiiipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*);
 typedef void (*vFpppppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
+typedef void* (*pFpupuupppppppppppppppppppp_t)(void*, uint32_t, void*, uint32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 typedef int32_t (*iFpppppppppppppppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
 
 #if defined(HAVE_LD80BITS)
@@ -4855,6 +4860,7 @@ void pFpuuuu(x64emu_t *emu, uintptr_t fcn) { pFpuuuu_t fn = (pFpuuuu_t)fcn; R_RA
 void pFpuuup(x64emu_t *emu, uintptr_t fcn) { pFpuuup_t fn = (pFpuuup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); }
 void pFpuupp(x64emu_t *emu, uintptr_t fcn) { pFpuupp_t fn = (pFpuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void pFpuLpp(x64emu_t *emu, uintptr_t fcn) { pFpuLpp_t fn = (pFpuLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
+void pFpuppu(x64emu_t *emu, uintptr_t fcn) { pFpuppu_t fn = (pFpuppu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); }
 void pFpuppp(x64emu_t *emu, uintptr_t fcn) { pFpuppp_t fn = (pFpuppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void pFpUdii(x64emu_t *emu, uintptr_t fcn) { pFpUdii_t fn = (pFpUdii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, emu->xmm[0].d[0], (int32_t)R_RDX, (int32_t)R_RCX); }
 void pFpfffi(x64emu_t *emu, uintptr_t fcn) { pFpfffi_t fn = (pFpfffi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], (int32_t)R_RSI); }
@@ -6054,6 +6060,7 @@ void vFuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuuuu_t fn = (vFuuu
 void vFffffffffffff(x64emu_t *emu, uintptr_t fcn) { vFffffffffffff_t fn = (vFffffffffffff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16), *(float*)(R_RSP + 24), *(float*)(R_RSP + 32)); }
 void vFpipppiiiipii(x64emu_t *emu, uintptr_t fcn) { vFpipppiiiipii_t fn = (vFpipppiiiipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); }
 void vFpippppiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpippppiiiipi_t fn = (vFpippppiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); }
+void vFpupppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpupppppppppp_t fn = (vFpupppppppppp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); }
 void vFppiiiiddddii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiddddii_t fn = (vFppiiiiddddii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); }
 void vFppiiuuuiupup(x64emu_t *emu, uintptr_t fcn) { vFppiiuuuiupup_t fn = (vFppiiuuuiupup_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); }
 void vFppiipppiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiipppiiiii_t fn = (vFppiipppiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); }
@@ -6137,13 +6144,16 @@ void vFpppipppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppipppppppppppppp_t
 void iFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppp_t fn = (iFpppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); }
 void LFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { LFpppppppppppppppppp_t fn = (LFpppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); }
 void pFippppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFippppppppppppppppp_t fn = (pFippppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); }
+void pFpupppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupppppppppppppppp_t fn = (pFpupppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); }
 void vFpiiiiiiiiiiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiiiiiiiiiiiiii_t fn = (vFpiiiiiiiiiiiiiiiiii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96), *(int32_t*)(R_RSP + 104)); }
 void uFbWWWCCCCCCCCWCCCCCC(x64emu_t *emu, uintptr_t fcn) { uFbWWWCCCCCCCCWCCCCCC_t fn = (uFbWWWCCCCCCCCWCCCCCC_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint8_t*)(R_RSP + 32), *(uint8_t*)(R_RSP + 40), *(uint8_t*)(R_RSP + 48), *(uint16_t*)(R_RSP + 56), *(uint8_t*)(R_RSP + 64), *(uint8_t*)(R_RSP + 72), *(uint8_t*)(R_RSP + 80), *(uint8_t*)(R_RSP + 88), *(uint8_t*)(R_RSP + 96), *(uint8_t*)(R_RSP + 104)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); }
 void pFiiiippppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFiiiippppppppppppppp_t fn = (pFiiiippppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); }
 void pFpippppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpippppppppppppppppp_t fn = (pFpippppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); }
+void pFpupupppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupupppppppppppppppp_t fn = (pFpupupppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112)); }
 void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128)); }
 void uFippuuuuiiiiuuiiiiiiiipp(x64emu_t *emu, uintptr_t fcn) { uFippuuuuiiiiuuiiiiiiiipp_t fn = (uFippuuuuiiiiuuiiiiiiiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96), *(int32_t*)(R_RSP + 104), *(int32_t*)(R_RSP + 112), *(int32_t*)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136)); }
 void vFpppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppppppppppppppppp_t fn = (vFpppppppppppppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144)); }
+void pFpupuupppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupuupppppppppppppppppppp_t fn = (pFpupuupppppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152)); }
 void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152), *(void**)(R_RSP + 160), *(void**)(R_RSP + 168), *(void**)(R_RSP + 176), *(void**)(R_RSP + 184), *(void**)(R_RSP + 192), *(void**)(R_RSP + 200), *(void**)(R_RSP + 208), *(void**)(R_RSP + 216), *(void**)(R_RSP + 224)); }
 
 #if defined(HAVE_LD80BITS)
@@ -7615,6 +7625,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &pFpuuup) return 1;
 	if (fun == &pFpuupp) return 1;
 	if (fun == &pFpuLpp) return 1;
+	if (fun == &pFpuppu) return 1;
 	if (fun == &pFpuppp) return 1;
 	if (fun == &pFpUdii) return 2;
 	if (fun == &pFpfffi) return 4;
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 9545ebcb..e2883b2d 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -1776,6 +1776,7 @@ void pFpuuuu(x64emu_t *emu, uintptr_t fnc);
 void pFpuuup(x64emu_t *emu, uintptr_t fnc);
 void pFpuupp(x64emu_t *emu, uintptr_t fnc);
 void pFpuLpp(x64emu_t *emu, uintptr_t fnc);
+void pFpuppu(x64emu_t *emu, uintptr_t fnc);
 void pFpuppp(x64emu_t *emu, uintptr_t fnc);
 void pFpUdii(x64emu_t *emu, uintptr_t fnc);
 void pFpfffi(x64emu_t *emu, uintptr_t fnc);
@@ -2975,6 +2976,7 @@ void vFuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fnc);
 void vFffffffffffff(x64emu_t *emu, uintptr_t fnc);
 void vFpipppiiiipii(x64emu_t *emu, uintptr_t fnc);
 void vFpippppiiiipi(x64emu_t *emu, uintptr_t fnc);
+void vFpupppppppppp(x64emu_t *emu, uintptr_t fnc);
 void vFppiiiiddddii(x64emu_t *emu, uintptr_t fnc);
 void vFppiiuuuiupup(x64emu_t *emu, uintptr_t fnc);
 void vFppiipppiiiii(x64emu_t *emu, uintptr_t fnc);
@@ -3058,13 +3060,16 @@ void vFpppipppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void iFpppppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void LFpppppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void pFippppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
+void pFpupppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void vFpiiiiiiiiiiiiiiiiii(x64emu_t *emu, uintptr_t fnc);
 void uFbWWWCCCCCCCCWCCCCCC(x64emu_t *emu, uintptr_t fnc);
 void pFiiiippppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void pFpippppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
+void pFpupupppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void uFippuuuuiiiiuuiiiiiiiipp(x64emu_t *emu, uintptr_t fnc);
 void vFpppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
+void pFpupuupppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc);
 
 #if defined(HAVE_LD80BITS)
diff --git a/src/wrapped/wrappedwaylandclient.c b/src/wrapped/wrappedwaylandclient.c
index 2ecac23c..0167d2fe 100644
--- a/src/wrapped/wrappedwaylandclient.c
+++ b/src/wrapped/wrappedwaylandclient.c
@@ -21,41 +21,463 @@
 const char* waylandclientName = "libwayland-client.so.0";
 #define LIBNAME waylandclient
 
-static void AutoBridgeInterfaces(void* lib, bridge_t* bridge)
-{
-    // creates bridges for the various interfaces of this libs...
-    void** p = NULL;
-    p = dlsym(lib, "wl_buffer_interface");
-    if(p) {
-        AddAutomaticBridge(bridge, vFpp, *p, 0, "wl_buffer_interface_destroy");
-    }
-    p = dlsym(lib, "wl_compositor_interface");
-    if(p) {
-        AddAutomaticBridge(bridge, vFppu, p[0], 0, "wl_compositor_interface_create_surface");
-        AddAutomaticBridge(bridge, vFppu, p[1], 0, "wl_compositor_interface_create_region");
-    }
-    p = dlsym(lib, "wl_display_interface");
-    if(p) {
-        AddAutomaticBridge(bridge, vFppu, p[0], 0, "wl_display_interface_sync");
-        AddAutomaticBridge(bridge, vFppu, p[1], 0, "wl_display_interface_get_registry");
-    }
-    p = dlsym(lib, "wl_keyboard_interface");
-    if(p) {
-        AddAutomaticBridge(bridge, vFpp, *p, 0, "wl_keyboard_interface_release");
-    }
-    p = dlsym(lib, "wl_output_interface");
-    if(p) {
-        AddAutomaticBridge(bridge, vFpp, *p, 0, "wl_output_interface_release");
-    }
-    p = dlsym(lib, "wl_pointer_interface");
-    if(p) {
-        AddAutomaticBridge(bridge, vFppupii, p[0], 0, "wl_pointer_interface_set_cursor");
-        AddAutomaticBridge(bridge, vFppu, p[1], 0, "wl_pointer_interface_release");
-    }
-}
-
-#define CUSTOM_INIT         \
-    AutoBridgeInterfaces(lib->w.lib, lib->w.bridge);
+#define ADDED_FUNCTIONS() \
+
+#include "generated/wrappedwaylandclienttypes.h"
+
+#include "wrappercallback.h"
+
+#define SUPER() \
+GO(0)   \
+GO(1)   \
+GO(2)   \
+GO(3)   \
+GO(4)
+
+// wl_registry_listener ...
+typedef struct my_wl_registry_listener_s {
+    uintptr_t   global; //vFppupu
+    uintptr_t   global_remove;  //vFppu
+} my_wl_registry_listener_t;
+#define GO(A)   \
+static my_wl_registry_listener_t* ref_wl_registry_listener_##A = NULL;                              \
+static void* my_wl_registry_listener_global_##A(void* a, void* b, uint32_t c, void* d, uint32_t e)  \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_registry_listener_##A->global, "ppupu", a, b, c, d, e);                   \
+}                                                                                                   \
+static void* my_wl_registry_listener_global_remove_##A(void* a, void* b, uint32_t c)                \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_registry_listener_##A->global_remove, "ppu", a, b, c);                    \
+}                                                                                                   \
+static my_wl_registry_listener_t my_wl_registry_listener_fct_##A = {                                \
+    (uintptr_t)my_wl_registry_listener_global_##A,                                                  \
+    (uintptr_t)my_wl_registry_listener_global_remove_##A                                            \
+};
+SUPER()
+#undef GO
+static void* find_wl_registry_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_registry_listener_##A == fct) return &my_wl_registry_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_registry_listener_##A == 0) {ref_wl_registry_listener_##A = fct; return &my_wl_registry_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_registry_listener callback\n");
+    return NULL;
+}
+// xdg_surface_listener ...
+typedef struct my_xdg_surface_listener_s {
+    uintptr_t   configure; //vFppiipu
+    uintptr_t   close;  //vFpp
+} my_xdg_surface_listener_t;
+#define GO(A)   \
+static my_xdg_surface_listener_t* ref_xdg_surface_listener_##A = NULL;                                  \
+static void* my_xdg_surface_listener_configure_##A(void* a, void* b, int c, int d, void* e, uint32_t f) \
+{                                                                                                       \
+    RunFunctionFmt(ref_xdg_surface_listener_##A->configure, "ppiipu", a, b, c, d, e, f);                \
+}                                                                                                       \
+static void* my_xdg_surface_listener_close_##A(void* a, void* b)                                        \
+{                                                                                                       \
+    RunFunctionFmt(ref_xdg_surface_listener_##A->close, "pp", a, b);                                    \
+}                                                                                                       \
+static my_xdg_surface_listener_t my_xdg_surface_listener_fct_##A = {                                    \
+    (uintptr_t)my_xdg_surface_listener_configure_##A,                                                   \
+    (uintptr_t)my_xdg_surface_listener_close_##A                                                        \
+};
+SUPER()
+#undef GO
+static void* find_xdg_surface_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_xdg_surface_listener_##A == fct) return &my_xdg_surface_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_xdg_surface_listener_##A == 0) {ref_xdg_surface_listener_##A = fct; return &my_xdg_surface_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client xdg_surface_listener callback\n");
+    return NULL;
+}
+// xdg_toplevel_listener ...
+typedef struct my_xdg_toplevel_listener_s {
+    uintptr_t   configure; //vFppiip
+    uintptr_t   close;  //vFpp
+} my_xdg_toplevel_listener_t;
+#define GO(A)   \
+static my_xdg_toplevel_listener_t* ref_xdg_toplevel_listener_##A = NULL;                        \
+static void* my_xdg_toplevel_listener_configure_##A(void* a, void* b, int c, int d, void* e)    \
+{                                                                                               \
+    RunFunctionFmt(ref_xdg_toplevel_listener_##A->configure, "ppiip", a, b, c, d, e);           \
+}                                                                                               \
+static void* my_xdg_toplevel_listener_close_##A(void* a, void* b)                               \
+{                                                                                               \
+    RunFunctionFmt(ref_xdg_toplevel_listener_##A->close, "pp", a, b);                           \
+}                                                                                               \
+static my_xdg_toplevel_listener_t my_xdg_toplevel_listener_fct_##A = {                          \
+    (uintptr_t)my_xdg_toplevel_listener_configure_##A,                                          \
+    (uintptr_t)my_xdg_toplevel_listener_close_##A                                               \
+};
+SUPER()
+#undef GO
+static void* find_xdg_toplevel_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_xdg_toplevel_listener_##A == fct) return &my_xdg_toplevel_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_xdg_toplevel_listener_##A == 0) {ref_xdg_toplevel_listener_##A = fct; return &my_xdg_toplevel_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client xdg_toplevel_listener callback\n");
+    return NULL;
+}
+// xdg_wm_base_listener ...
+typedef struct my_xdg_wm_base_listener_s {
+    uintptr_t   ping; //vFppu
+} my_xdg_wm_base_listener_t;
+#define GO(A)   \
+static my_xdg_wm_base_listener_t* ref_xdg_wm_base_listener_##A = NULL;      \
+static void* my_xdg_wm_base_listener_ping_##A(void* a, void* b, uint32_t c) \
+{                                                                           \
+    RunFunctionFmt(ref_xdg_wm_base_listener_##A->ping, "ppu", a, b, c);     \
+}                                                                           \
+static my_xdg_wm_base_listener_t my_xdg_wm_base_listener_fct_##A = {        \
+    (uintptr_t)my_xdg_wm_base_listener_ping_##A,                            \
+};
+SUPER()
+#undef GO
+static void* find_xdg_wm_base_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_xdg_wm_base_listener_##A == fct) return &my_xdg_wm_base_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_xdg_wm_base_listener_##A == 0) {ref_xdg_wm_base_listener_##A = fct; return &my_xdg_wm_base_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client xdg_wm_base_listener callback\n");
+    return NULL;
+}
+// wl_shm_listener ...
+typedef struct my_wl_shm_listener_s {
+    uintptr_t   format; //vFppu
+} my_wl_shm_listener_t;
+#define GO(A)   \
+static my_wl_shm_listener_t* ref_wl_shm_listener_##A = NULL;                \
+static void* my_wl_shm_listener_format_##A(void* a, void* b, uint32_t c)    \
+{                                                                           \
+    RunFunctionFmt(ref_wl_shm_listener_##A->format, "ppu", a, b, c);        \
+}                                                                           \
+static my_wl_shm_listener_t my_wl_shm_listener_fct_##A = {                  \
+    (uintptr_t)my_wl_shm_listener_format_##A,                               \
+};
+SUPER()
+#undef GO
+static void* find_wl_shm_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_shm_listener_##A == fct) return &my_wl_shm_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_shm_listener_##A == 0) {ref_wl_shm_listener_##A = fct; return &my_wl_shm_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_shm_listener callback\n");
+    return NULL;
+}
+// wl_output_listener ...
+typedef struct my_wl_output_listener_s {
+    uintptr_t   geometry; //vFppiiiiippi
+    uintptr_t   mode;  //vFppuiii
+    uintptr_t   done;  //vFpp
+    uintptr_t   scale;  //vFppi
+    uintptr_t   name;   //vFppp
+    uintptr_t   description;   //vFppp
+} my_wl_output_listener_t;
+#define GO(A)   \
+static my_wl_output_listener_t* ref_wl_output_listener_##A = NULL;                                      \
+static void* my_wl_output_listener_geometry_##A(void* a, void* b, int c, int d, int e, int f, int g, void* h, void* i, int j)\
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_output_listener_##A->geometry, "ppiiiiippi", a, b, c, d, e, f, g, h, i, j);   \
+}                                                                                                       \
+static void* my_wl_output_listener_mode_##A(void* a, void* b, uint32_t c, int d, int e, int f)          \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_output_listener_##A->mode, "ppuiii", a, b, c, d, e, f);                       \
+}                                                                                                       \
+static void* my_wl_output_listener_done_##A(void* a, void* b)                                           \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_output_listener_##A->done, "pp", a, b);                                       \
+}                                                                                                       \
+static void* my_wl_output_listener_scale_##A(void* a, void* b, int c)                                   \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_output_listener_##A->scale, "ppi", a, b, c);                                  \
+}                                                                                                       \
+static void* my_wl_output_listener_name_##A(void* a, void* b, void* c)                                  \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_output_listener_##A->name, "ppp", a, b, c);                                   \
+}                                                                                                       \
+static void* my_wl_output_listener_description_##A(void* a, void* b, void* c)                           \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_output_listener_##A->description, "ppp", a, b, c);                            \
+}                                                                                                       \
+static my_wl_output_listener_t my_wl_output_listener_fct_##A = {                                        \
+    (uintptr_t)my_wl_output_listener_geometry_##A,                                                      \
+    (uintptr_t)my_wl_output_listener_mode_##A,                                                          \
+    (uintptr_t)my_wl_output_listener_done_##A,                                                          \
+    (uintptr_t)my_wl_output_listener_scale_##A,                                                         \
+    (uintptr_t)my_wl_output_listener_name_##A,                                                          \
+    (uintptr_t)my_wl_output_listener_description_##A                                                    \
+};
+SUPER()
+#undef GO
+static void* find_wl_output_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_output_listener_##A == fct) return &my_wl_output_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_output_listener_##A == 0) {ref_wl_output_listener_##A = fct; return &my_wl_output_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_output_listener callback\n");
+    return NULL;
+}
+// wl_seat_listener ...
+typedef struct my_wl_seat_listener_s {
+    uintptr_t   capabilities; //vFppu
+    uintptr_t   name;  //vFppp
+} my_wl_seat_listener_t;
+#define GO(A)   \
+static my_wl_seat_listener_t* ref_wl_seat_listener_##A = NULL;                      \
+static void* my_wl_seat_listener_capabilities_##A(void* a, void* b, uint32_t c)     \
+{                                                                                   \
+    RunFunctionFmt(ref_wl_seat_listener_##A->capabilities, "ppu", a, b, c);         \
+}                                                                                   \
+static void* my_wl_seat_listener_name_##A(void* a, void* b, void* c)                \
+{                                                                                   \
+    RunFunctionFmt(ref_wl_seat_listener_##A->name, "ppp", a, b, c);                 \
+}                                                                                   \
+static my_wl_seat_listener_t my_wl_seat_listener_fct_##A = {                        \
+    (uintptr_t)my_wl_seat_listener_capabilities_##A,                                \
+    (uintptr_t)my_wl_seat_listener_name_##A                                         \
+};
+SUPER()
+#undef GO
+static void* find_wl_seat_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_seat_listener_##A == fct) return &my_wl_seat_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_seat_listener_##A == 0) {ref_wl_seat_listener_##A = fct; return &my_wl_seat_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_seat_listener callback\n");
+    return NULL;
+}
+// wl_pointer_listener ...
+typedef struct my_wl_pointer_listener_s {
+    uintptr_t   enter; //vFppupii
+    uintptr_t   leave;  //vFppup
+    uintptr_t   motion;  //vFppuii
+    uintptr_t   button;  //vFppuuuu
+    uintptr_t   axis;   //vFppuui
+    uintptr_t   frame;   //vFpp
+    uintptr_t   axis_source;   //vFppu
+    uintptr_t   axis_stop;   //vFppuu
+    uintptr_t   axis_discrete;   //vFppui
+    uintptr_t   axis_value120;   //vFppui
+    uintptr_t   axis_relative_direction;   //vFppuu
+} my_wl_pointer_listener_t;
+#define GO(A)   \
+static my_wl_pointer_listener_t* ref_wl_pointer_listener_##A = NULL;                                \
+static void* my_wl_pointer_listener_enter_##A(void* a, void* b, uint32_t c, void* d, int e, int f)  \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->enter, "ppupii", a, b, c, d, e, f);                 \
+}                                                                                                   \
+static void* my_wl_pointer_listener_leave_##A(void* a, void* b, uint32_t c, void* d)                \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->leave, "ppup", a, b, c, d);                         \
+}                                                                                                   \
+static void* my_wl_pointer_listener_motion_##A(void* a, void* b, uint32_t c, int d, int e)          \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->motion, "ppuii", a, b, c, d, e);                    \
+}                                                                                                   \
+static void* my_wl_pointer_listener_button_##A(void* a, void* b, uint32_t c, uint32_t d, uint32_t e, uint32_t f)\
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->button, "ppuuuu", a, b, c, d, e, f);                \
+}                                                                                                   \
+static void* my_wl_pointer_listener_axis_##A(void* a, void* b, uint32_t c, uint32_t d, int e)       \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->axis, "ppuui", a, b, c, d, e);                      \
+}                                                                                                   \
+static void* my_wl_pointer_listener_frame_##A(void* a, void* b)                                     \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->frame, "pp", a, b);                                 \
+}                                                                                                   \
+static void* my_wl_pointer_listener_axis_source_##A(void* a, void* b, uint32_t c)                   \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->axis_source, "ppu", a, b, c);                       \
+}                                                                                                   \
+static void* my_wl_pointer_listener_axis_stop_##A(void* a, void* b, uint32_t c, uint32_t d)         \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->axis_stop, "ppuu", a, b, c, d);                     \
+}                                                                                                   \
+static void* my_wl_pointer_listener_axis_discrete_##A(void* a, void* b, uint32_t c, int d)          \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->axis_discrete, "ppui", a, b, c, d);                 \
+}                                                                                                   \
+static void* my_wl_pointer_listener_axis_value120_##A(void* a, void* b, uint32_t c, int d)          \
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->axis_value120, "ppui", a, b, c, d);                 \
+}                                                                                                   \
+static void* my_wl_pointer_listener_axis_relative_direction_##A(void* a, void* b, uint32_t c, uint32_t d)\
+{                                                                                                   \
+    RunFunctionFmt(ref_wl_pointer_listener_##A->axis_relative_direction, "ppuu", a, b, c, d);       \
+}                                                                                                   \
+static my_wl_pointer_listener_t my_wl_pointer_listener_fct_##A = {                                  \
+    (uintptr_t)my_wl_pointer_listener_enter_##A,                                                    \
+    (uintptr_t)my_wl_pointer_listener_leave_##A,                                                    \
+    (uintptr_t)my_wl_pointer_listener_motion_##A,                                                   \
+    (uintptr_t)my_wl_pointer_listener_button_##A,                                                   \
+    (uintptr_t)my_wl_pointer_listener_axis_##A,                                                     \
+    (uintptr_t)my_wl_pointer_listener_frame_##A,                                                    \
+    (uintptr_t)my_wl_pointer_listener_axis_source_##A,                                              \
+    (uintptr_t)my_wl_pointer_listener_axis_stop_##A,                                                \
+    (uintptr_t)my_wl_pointer_listener_axis_discrete_##A,                                            \
+    (uintptr_t)my_wl_pointer_listener_axis_value120_##A,                                            \
+    (uintptr_t)my_wl_pointer_listener_axis_relative_direction_##A                                   \
+};
+SUPER()
+#undef GO
+static void* find_wl_pointer_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_pointer_listener_##A == fct) return &my_wl_pointer_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_pointer_listener_##A == 0) {ref_wl_pointer_listener_##A = fct; return &my_wl_pointer_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_pointer_listener callback\n");
+    return NULL;
+}
+// wl_keyboard_listener ...
+typedef struct my_wl_keyboard_listener_s {
+    uintptr_t   keymap; //vFppuiu
+    uintptr_t   enter;  //vFppup
+    uintptr_t   leave;  //vFppup
+    uintptr_t   key;  //vFppuuuuu
+    uintptr_t   modifiers;   //vFppuuuuu
+    uintptr_t   repeat_info;   //vFppii
+} my_wl_keyboard_listener_t;
+#define GO(A)   \
+static my_wl_keyboard_listener_t* ref_wl_keyboard_listener_##A = NULL;                                  \
+static void* my_wl_keyboard_listener_keymap_##A(void* a, void* b, uint32_t c, int d, uint32_t e)        \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_keyboard_listener_##A->keymap, "ppuiu", a, b, c, d, e);                       \
+}                                                                                                       \
+static void* my_wl_keyboard_listener_enter_##A(void* a, void* b, uint32_t c, void* d)                   \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_keyboard_listener_##A->enter, "ppup", a, b, c, d);                            \
+}                                                                                                       \
+static void* my_wl_keyboard_listener_leave_##A(void* a, void* b, uint32_t c, void* d)                   \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_keyboard_listener_##A->leave, "ppup", a, b, c, d);                            \
+}                                                                                                       \
+static void* my_wl_keyboard_listener_key_##A(void* a, void* b, uint32_t c, uint32_t d, uint32_t e, uint32_t f, uint32_t g)\
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_keyboard_listener_##A->key, "ppuuuuu", a, b, c, d, e, f, g);                  \
+}                                                                                                       \
+static void* my_wl_keyboard_listener_modifiers_##A(void* a, void* b, uint32_t c, uint32_t d, uint32_t e, uint32_t f, uint32_t g)\
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_keyboard_listener_##A->modifiers, "ppuuuuu", a, b, c, d, e, f, g);            \
+}                                                                                                       \
+static void* my_wl_keyboard_listener_repeat_info_##A(void* a, void* b, int c, int d)                    \
+{                                                                                                       \
+    RunFunctionFmt(ref_wl_keyboard_listener_##A->repeat_info, "ppii", a, b, c, d);                      \
+}                                                                                                       \
+static my_wl_keyboard_listener_t my_wl_keyboard_listener_fct_##A = {                                    \
+    (uintptr_t)my_wl_keyboard_listener_keymap_##A,                                                      \
+    (uintptr_t)my_wl_keyboard_listener_enter_##A,                                                       \
+    (uintptr_t)my_wl_keyboard_listener_leave_##A,                                                       \
+    (uintptr_t)my_wl_keyboard_listener_key_##A,                                                         \
+    (uintptr_t)my_wl_keyboard_listener_modifiers_##A,                                                   \
+    (uintptr_t)my_wl_keyboard_listener_repeat_info_##A                                                  \
+};
+SUPER()
+#undef GO
+static void* find_wl_keyboard_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_keyboard_listener_##A == fct) return &my_wl_keyboard_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_keyboard_listener_##A == 0) {ref_wl_keyboard_listener_##A = fct; return &my_wl_keyboard_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_keyboard_listener callback\n");
+    return NULL;
+}
+// wl_buffer_listener ...
+typedef struct my_wl_buffer_listener_s {
+    uintptr_t   release; //vFpp
+} my_wl_buffer_listener_t;
+#define GO(A)   \
+static my_wl_buffer_listener_t* ref_wl_buffer_listener_##A = NULL;      \
+static void* my_wl_buffer_listener_release_##A(void* a, void* b)        \
+{                                                                       \
+    RunFunctionFmt(ref_wl_buffer_listener_##A->release, "pp", a, b);    \
+}                                                                       \
+static my_wl_buffer_listener_t my_wl_buffer_listener_fct_##A = {        \
+    (uintptr_t)my_wl_buffer_listener_release_##A,                       \
+};
+SUPER()
+#undef GO
+static void* find_wl_buffer_listener_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(ref_wl_buffer_listener_##A == fct) return &my_wl_buffer_listener_fct_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(ref_wl_buffer_listener_##A == 0) {ref_wl_buffer_listener_##A = fct; return &my_wl_buffer_listener_fct_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_buffer_listener callback\n");
+    return NULL;
+}
+
+#undef SUPER
+
+EXPORT int my_wl_proxy_add_listener(x64emu_t* emu, void* proxy, void** l, void* data)
+{
+    const char* proxy_name = **(const char***)proxy;
+    if(!strcmp(proxy_name, "wl_registry")) {
+        l = find_wl_registry_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "xdg_surface")) {
+        l = find_xdg_surface_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "xdg_toplevel")) {
+        l = find_xdg_toplevel_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "xdg_wm_base")) {
+        l = find_xdg_wm_base_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "wl_shm")) {
+        l = find_wl_shm_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "wl_output")) {
+        l = find_wl_output_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "wl_seat")) {
+        l = find_wl_seat_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "wl_pointer")) {
+        l = find_wl_pointer_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "wl_keyboard")) {
+        l = find_wl_keyboard_listener_Fct(l);
+    } else if(!strcmp(proxy_name, "wl_buffer")) {
+        l = find_wl_buffer_listener_Fct(l);
+    } else
+        printf_log(LOG_INFO, "BOX64: Error, Wayland-client, add_listener to %s unknown, will crash soon!\n", proxy_name);
+    return my->wl_proxy_add_listener(proxy, l, data);
+}
 
 #include "wrappedlib_init.h"
 
diff --git a/src/wrapped/wrappedwaylandclient_private.h b/src/wrapped/wrappedwaylandclient_private.h
index 4e649349..ce5e86c0 100644
--- a/src/wrapped/wrappedwaylandclient_private.h
+++ b/src/wrapped/wrappedwaylandclient_private.h
@@ -6,9 +6,9 @@
 //GO(wl_array_copy, 
 //GO(wl_array_init, 
 //GO(wl_array_release, 
-DATA(wl_buffer_interface, sizeof(void*)*1)
+DATA(wl_buffer_interface, 40)
 //DATA(wl_callback_interface, 
-DATA(wl_compositor_interface, sizeof(void*)*2)
+DATA(wl_compositor_interface, 40)
 //DATA(wl_data_device_interface, 
 //DATA(wl_data_device_manager_interface, 
 //DATA(wl_data_offer_interface, 
@@ -26,14 +26,14 @@ GO(wl_display_flush, iFp)
 GO(wl_display_get_error, iFp)
 GO(wl_display_get_fd, iFp)
 //GO(wl_display_get_protocol_error, 
-DATA(wl_display_interface, sizeof(void*)*2)
+DATA(wl_display_interface, 40)
 GO(wl_display_prepare_read, iFp)
 GO(wl_display_prepare_read_queue, iFpp)
 GO(wl_display_read_events, iFp)
 GO(wl_display_roundtrip, iFp)
 GO(wl_display_roundtrip_queue, iFpp)
 GO(wl_event_queue_destroy, vFp)
-DATA(wl_keyboard_interface, sizeof(void*)*1)
+DATA(wl_keyboard_interface, 40)
 //GO(wl_list_empty, 
 //GO(wl_list_init, 
 //GO(wl_list_insert, 
@@ -41,10 +41,10 @@ DATA(wl_keyboard_interface, sizeof(void*)*1)
 //GO(wl_list_length, 
 //GO(wl_list_remove, 
 //GO(wl_log_set_handler_client, 
-DATA(wl_output_interface, sizeof(void*)*1)
-DATA(wl_pointer_interface, sizeof(void*)*2)
+DATA(wl_output_interface, 40)
+DATA(wl_pointer_interface, 40)
 //GO(wl_proxy_add_dispatcher, 
-GO(wl_proxy_add_listener, iFppp)
+GOM(wl_proxy_add_listener, iFEppp)
 GO(wl_proxy_create, pFpp)
 GO(wl_proxy_create_wrapper, pFp)
 GO(wl_proxy_destroy, vFp)