diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-07 10:39:53 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-07 10:39:53 +0200 |
| commit | 9d63f0ce9a3c8b9453084e0748fd0f3d8cfb8ae8 (patch) | |
| tree | 8e5b39c30260fd790a0c017745770d9000094004 /src | |
| parent | afd8d305f386a79ab07927758edb5c2957878ab0 (diff) | |
| download | box64-9d63f0ce9a3c8b9453084e0748fd0f3d8cfb8ae8.tar.gz box64-9d63f0ce9a3c8b9453084e0748fd0f3d8cfb8ae8.zip | |
Added wrapped threads_add_timeout_full to gdk2 and gdk3 (for #997)
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 72 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedgdk3types.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedgdkx112types.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibctypes.h | 66 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappedgdk3.c | 6 | ||||
| -rw-r--r-- | src/wrapped/wrappedgdk3_private.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappedgdkx112.c | 50 | ||||
| -rw-r--r-- | src/wrapped/wrappedgdkx112_private.h | 2 |
10 files changed, 204 insertions, 8 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index cd9abe7d..d8701336 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -896,6 +896,7 @@ #() iFEpLi #() iFEpLp #() iFEppi +#() iFEppu #() iFEppd #() iFEppL #() iFEppp @@ -2921,7 +2922,6 @@ #!defined(HAVE_LD80BITS) KFKK #!defined(HAVE_LD80BITS) KFKp #defined(NOALIGN) iFipiip -#!defined(NOALIGN) iFEppu #!defined(NOALIGN) iFEiiip #!defined(NOALIGN) iFEipii #!defined(NOALIGN) iFEipiip @@ -3195,6 +3195,8 @@ wrappedgdk3: - gdk_threads_add_idle_full - iFiippp: - gdk_input_add_full +- uFiuppp: + - gdk_threads_add_timeout_full wrappedgdkpixbuf2: - pFpiiiiiipp: - gdk_pixbuf_new_from_data @@ -3211,6 +3213,8 @@ wrappedgdkx112: - gdk_input_add - iFiippp: - gdk_input_add_full +- uFiuppp: + - gdk_threads_add_timeout_full wrappedgio2: - vFppp: - g_simple_async_result_set_op_res_gpointer @@ -3873,6 +3877,18 @@ wrappedlibc: - _setjmp - atexit - getcontext + - pthread_attr_destroy + - pthread_attr_init + - pthread_barrierattr_destroy + - pthread_barrierattr_init + - pthread_cond_broadcast + - pthread_cond_destroy + - pthread_condattr_destroy + - pthread_condattr_init + - pthread_getattr_default_np + - pthread_mutexattr_destroy + - pthread_mutexattr_init + - pthread_setattr_default_np - register_printf_type - setcontext - setjmp @@ -3904,12 +3920,30 @@ wrappedlibc: - iFip: - fstat - fstat64 +- iFLp: + - pthread_getattr_np - iFpi: - __sigsetjmp - backtrace + - pthread_attr_setdetachstate + - pthread_attr_setinheritsched + - pthread_attr_setschedpolicy + - pthread_attr_setscope + - pthread_barrierattr_setpshared + - pthread_condattr_setclock + - pthread_condattr_setpshared + - pthread_kill + - pthread_kill@GLIBC_2.2.5 + - pthread_mutexattr_setkind_np + - pthread_mutexattr_setprotocol + - pthread_mutexattr_setpshared + - pthread_mutexattr_setrobust + - pthread_mutexattr_settype - sigsetjmp - iFpL: - munmap + - pthread_attr_setguardsize + - pthread_attr_setstacksize - iFpp: - __vprintf_chk - dl_iterate_phdr @@ -3917,6 +3951,28 @@ wrappedlibc: - execvp - lstat - lstat64 + - pthread_attr_getdetachstate + - pthread_attr_getguardsize + - pthread_attr_getinheritsched + - pthread_attr_getschedparam + - pthread_attr_getschedpolicy + - pthread_attr_getscope + - pthread_attr_getstackaddr + - pthread_attr_getstacksize + - pthread_attr_setschedparam + - pthread_attr_setstackaddr + - pthread_barrierattr_getpshared + - pthread_cond_init + - pthread_cond_wait + - pthread_condattr_getclock + - pthread_condattr_getpshared + - pthread_key_create + - pthread_mutex_init + - pthread_mutexattr_getkind_np + - pthread_mutexattr_getprotocol + - pthread_mutexattr_getrobust + - pthread_mutexattr_gettype + - pthread_once - sigaltstack - stat - stat64 @@ -3978,9 +4034,17 @@ wrappedlibc: - vdprintf - iFpLi: - mprotect +- iFpLp: + - pthread_attr_setaffinity_np + - pthread_getaffinity_np + - pthread_setaffinity_np - iFppi: - ftw - ftw64 +- iFppu: + - pthread_barrier_init +- iFppL: + - pthread_attr_setstack - iFppp: - __cxa_atexit - __cxa_thread_atexit_impl @@ -3989,6 +4053,9 @@ wrappedlibc: - __vfprintf_chk - __vsscanf - execve + - pthread_atfork + - pthread_attr_getstack + - pthread_cond_timedwait - iFppV: - __asprintf - __isoc23_fscanf @@ -4075,11 +4142,14 @@ wrappedlibc: - vswprintf - iFppii: - nftw64 +- iFppip: + - pthread_cond_clockwait - iFppiV: - makecontext - iFpppp: - __register_atfork - __vsprintf_chk + - pthread_create - scandir - scandir64 - lFuipp: diff --git a/src/wrapped/generated/wrappedgdk3types.h b/src/wrapped/generated/wrappedgdk3types.h index c6b278f6..7e207207 100644 --- a/src/wrapped/generated/wrappedgdk3types.h +++ b/src/wrapped/generated/wrappedgdk3types.h @@ -17,6 +17,7 @@ typedef void (*vFppp_t)(void*, void*, void*); typedef int32_t (*iFiipp_t)(int32_t, int32_t, void*, void*); typedef uint32_t (*uFippp_t)(int32_t, void*, void*, void*); typedef int32_t (*iFiippp_t)(int32_t, int32_t, void*, void*, void*); +typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(gdk_init, vFpp_t) \ @@ -26,6 +27,7 @@ typedef int32_t (*iFiippp_t)(int32_t, int32_t, void*, void*, void*); GO(gdk_window_remove_filter, vFppp_t) \ GO(gdk_input_add, iFiipp_t) \ GO(gdk_threads_add_idle_full, uFippp_t) \ - GO(gdk_input_add_full, iFiippp_t) + GO(gdk_input_add_full, iFiippp_t) \ + GO(gdk_threads_add_timeout_full, uFiuppp_t) #endif // __wrappedgdk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkx112types.h b/src/wrapped/generated/wrappedgdkx112types.h index 1d129740..d33182bf 100644 --- a/src/wrapped/generated/wrappedgdkx112types.h +++ b/src/wrapped/generated/wrappedgdkx112types.h @@ -16,6 +16,7 @@ typedef int32_t (*iFpp_t)(void*, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef int32_t (*iFiipp_t)(int32_t, int32_t, void*, void*); typedef int32_t (*iFiippp_t)(int32_t, int32_t, void*, void*, void*); +typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(gdk_init, vFpp_t) \ @@ -24,6 +25,7 @@ typedef int32_t (*iFiippp_t)(int32_t, int32_t, void*, void*, void*); GO(gdk_window_add_filter, vFppp_t) \ GO(gdk_window_remove_filter, vFppp_t) \ GO(gdk_input_add, iFiipp_t) \ - GO(gdk_input_add_full, iFiippp_t) + GO(gdk_input_add_full, iFiippp_t) \ + GO(gdk_threads_add_timeout_full, uFiuppp_t) #endif // __wrappedgdkx112TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index 5f5b8e1b..4110d5ca 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -25,6 +25,7 @@ typedef void (*vFpu_t)(void*, uint32_t); typedef void (*vFpp_t)(void*, void*); typedef void (*vFpV_t)(void*, ...); typedef int32_t (*iFip_t)(int32_t, void*); +typedef int32_t (*iFLp_t)(uintptr_t, void*); typedef int32_t (*iFpi_t)(void*, int32_t); typedef int32_t (*iFpL_t)(void*, uintptr_t); typedef int32_t (*iFpp_t)(void*, void*); @@ -44,7 +45,10 @@ typedef int32_t (*iFipp_t)(int32_t, void*, void*); typedef int32_t (*iFipV_t)(int32_t, void*, ...); typedef int32_t (*iFipA_t)(int32_t, void*, va_list); typedef int32_t (*iFpLi_t)(void*, uintptr_t, int32_t); +typedef int32_t (*iFpLp_t)(void*, uintptr_t, void*); typedef int32_t (*iFppi_t)(void*, void*, int32_t); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); typedef int32_t (*iFppp_t)(void*, void*, void*); typedef int32_t (*iFppV_t)(void*, void*, ...); typedef int32_t (*iFppA_t)(void*, void*, va_list); @@ -72,6 +76,7 @@ typedef int32_t (*iFpipA_t)(void*, int32_t, void*, va_list); typedef int32_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); typedef int32_t (*iFpLpA_t)(void*, uintptr_t, void*, va_list); typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFppip_t)(void*, void*, int32_t, void*); typedef int32_t (*iFppiV_t)(void*, void*, int32_t, ...); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); typedef intptr_t (*lFuipp_t)(uint32_t, int32_t, void*, void*); @@ -107,6 +112,18 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(_setjmp, iFp_t) \ GO(atexit, iFp_t) \ GO(getcontext, iFp_t) \ + GO(pthread_attr_destroy, iFp_t) \ + GO(pthread_attr_init, iFp_t) \ + GO(pthread_barrierattr_destroy, iFp_t) \ + GO(pthread_barrierattr_init, iFp_t) \ + GO(pthread_cond_broadcast, iFp_t) \ + GO(pthread_cond_destroy, iFp_t) \ + GO(pthread_condattr_destroy, iFp_t) \ + GO(pthread_condattr_init, iFp_t) \ + GO(pthread_getattr_default_np, iFp_t) \ + GO(pthread_mutexattr_destroy, iFp_t) \ + GO(pthread_mutexattr_init, iFp_t) \ + GO(pthread_setattr_default_np, iFp_t) \ GO(register_printf_type, iFp_t) \ GO(setcontext, iFp_t) \ GO(setjmp, iFp_t) \ @@ -130,16 +147,55 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(warnx, vFpV_t) \ GO(fstat, iFip_t) \ GO(fstat64, iFip_t) \ + GO(pthread_getattr_np, iFLp_t) \ GO(__sigsetjmp, iFpi_t) \ GO(backtrace, iFpi_t) \ + GO(pthread_attr_setdetachstate, iFpi_t) \ + GO(pthread_attr_setinheritsched, iFpi_t) \ + GO(pthread_attr_setschedpolicy, iFpi_t) \ + GO(pthread_attr_setscope, iFpi_t) \ + GO(pthread_barrierattr_setpshared, iFpi_t) \ + GO(pthread_condattr_setclock, iFpi_t) \ + GO(pthread_condattr_setpshared, iFpi_t) \ + GO(pthread_kill, iFpi_t) \ + GO(pthread_kill@GLIBC_2.2.5, iFpi_t) \ + GO(pthread_mutexattr_setkind_np, iFpi_t) \ + GO(pthread_mutexattr_setprotocol, iFpi_t) \ + GO(pthread_mutexattr_setpshared, iFpi_t) \ + GO(pthread_mutexattr_setrobust, iFpi_t) \ + GO(pthread_mutexattr_settype, iFpi_t) \ GO(sigsetjmp, iFpi_t) \ GO(munmap, iFpL_t) \ + GO(pthread_attr_setguardsize, iFpL_t) \ + GO(pthread_attr_setstacksize, iFpL_t) \ GO(__vprintf_chk, iFpp_t) \ GO(dl_iterate_phdr, iFpp_t) \ GO(execv, iFpp_t) \ GO(execvp, iFpp_t) \ GO(lstat, iFpp_t) \ GO(lstat64, iFpp_t) \ + GO(pthread_attr_getdetachstate, iFpp_t) \ + GO(pthread_attr_getguardsize, iFpp_t) \ + GO(pthread_attr_getinheritsched, iFpp_t) \ + GO(pthread_attr_getschedparam, iFpp_t) \ + GO(pthread_attr_getschedpolicy, iFpp_t) \ + GO(pthread_attr_getscope, iFpp_t) \ + GO(pthread_attr_getstackaddr, iFpp_t) \ + GO(pthread_attr_getstacksize, iFpp_t) \ + GO(pthread_attr_setschedparam, iFpp_t) \ + GO(pthread_attr_setstackaddr, iFpp_t) \ + GO(pthread_barrierattr_getpshared, iFpp_t) \ + GO(pthread_cond_init, iFpp_t) \ + GO(pthread_cond_wait, iFpp_t) \ + GO(pthread_condattr_getclock, iFpp_t) \ + GO(pthread_condattr_getpshared, iFpp_t) \ + GO(pthread_key_create, iFpp_t) \ + GO(pthread_mutex_init, iFpp_t) \ + GO(pthread_mutexattr_getkind_np, iFpp_t) \ + GO(pthread_mutexattr_getprotocol, iFpp_t) \ + GO(pthread_mutexattr_getrobust, iFpp_t) \ + GO(pthread_mutexattr_gettype, iFpp_t) \ + GO(pthread_once, iFpp_t) \ GO(sigaltstack, iFpp_t) \ GO(stat, iFpp_t) \ GO(stat64, iFpp_t) \ @@ -185,8 +241,13 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(dprintf, iFipV_t) \ GO(vdprintf, iFipA_t) \ GO(mprotect, iFpLi_t) \ + GO(pthread_attr_setaffinity_np, iFpLp_t) \ + GO(pthread_getaffinity_np, iFpLp_t) \ + GO(pthread_setaffinity_np, iFpLp_t) \ GO(ftw, iFppi_t) \ GO(ftw64, iFppi_t) \ + GO(pthread_barrier_init, iFppu_t) \ + GO(pthread_attr_setstack, iFppL_t) \ GO(__cxa_atexit, iFppp_t) \ GO(__cxa_thread_atexit_impl, iFppp_t) \ GO(__isoc99_vfscanf, iFppp_t) \ @@ -194,6 +255,9 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(__vfprintf_chk, iFppp_t) \ GO(__vsscanf, iFppp_t) \ GO(execve, iFppp_t) \ + GO(pthread_atfork, iFppp_t) \ + GO(pthread_attr_getstack, iFppp_t) \ + GO(pthread_cond_timedwait, iFppp_t) \ GO(__asprintf, iFppV_t) \ GO(__isoc23_fscanf, iFppV_t) \ GO(__isoc23_sscanf, iFppV_t) \ @@ -254,9 +318,11 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(vsnprintf, iFpLpA_t) \ GO(vswprintf, iFpLpA_t) \ GO(nftw64, iFppii_t) \ + GO(pthread_cond_clockwait, iFppip_t) \ GO(makecontext, iFppiV_t) \ GO(__register_atfork, iFpppp_t) \ GO(__vsprintf_chk, iFpppp_t) \ + GO(pthread_create, iFpppp_t) \ GO(scandir, iFpppp_t) \ GO(scandir64, iFpppp_t) \ GO(ptrace, lFuipp_t) \ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 643ed5eb..b197c9f8 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -932,6 +932,7 @@ typedef int32_t (*iFEpUp_t)(x64emu_t*, void*, uint64_t, void*); typedef int32_t (*iFEpLi_t)(x64emu_t*, void*, uintptr_t, int32_t); typedef int32_t (*iFEpLp_t)(x64emu_t*, void*, uintptr_t, void*); typedef int32_t (*iFEppi_t)(x64emu_t*, void*, void*, int32_t); +typedef int32_t (*iFEppu_t)(x64emu_t*, void*, void*, uint32_t); typedef int32_t (*iFEppd_t)(x64emu_t*, void*, void*, double); typedef int32_t (*iFEppL_t)(x64emu_t*, void*, void*, uintptr_t); typedef int32_t (*iFEppp_t)(x64emu_t*, void*, void*, void*); @@ -2968,7 +2969,6 @@ typedef int32_t (*iFipiip_t)(int32_t, void*, int32_t, int32_t, void*); #endif #if !defined(NOALIGN) -typedef int32_t (*iFEppu_t)(x64emu_t*, void*, void*, uint32_t); typedef int32_t (*iFEiiip_t)(x64emu_t*, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFEipii_t)(x64emu_t*, int32_t, void*, int32_t, int32_t); typedef int32_t (*iFEipiip_t)(x64emu_t*, int32_t, void*, int32_t, int32_t, void*); @@ -3872,6 +3872,7 @@ void iFEpUp(x64emu_t *emu, uintptr_t fcn) { iFEpUp_t fn = (iFEpUp_t)fcn; R_RAX=( void iFEpLi(x64emu_t *emu, uintptr_t fcn) { iFEpLi_t fn = (iFEpLi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } void iFEpLp(x64emu_t *emu, uintptr_t fcn) { iFEpLp_t fn = (iFEpLp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void iFEppi(x64emu_t *emu, uintptr_t fcn) { iFEppi_t fn = (iFEppi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void iFEppu(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void iFEppd(x64emu_t *emu, uintptr_t fcn) { iFEppd_t fn = (iFEppd_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } void iFEppL(x64emu_t *emu, uintptr_t fcn) { iFEppL_t fn = (iFEppL_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void iFEppp(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } @@ -5908,7 +5909,6 @@ void iFipiip(x64emu_t *emu, uintptr_t fcn) { iFipiip_t fn = (iFipiip_t)fcn; R_RA #endif #if !defined(NOALIGN) -void iFEppu(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void iFEiiip(x64emu_t *emu, uintptr_t fcn) { iFEiiip_t fn = (iFEiiip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void iFEipii(x64emu_t *emu, uintptr_t fcn) { iFEipii_t fn = (iFEipii_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void iFEipiip(x64emu_t *emu, uintptr_t fcn) { iFEipiip_t fn = (iFEipiip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 5634d504..02d10f13 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -933,6 +933,7 @@ void iFEpUp(x64emu_t *emu, uintptr_t fnc); void iFEpLi(x64emu_t *emu, uintptr_t fnc); void iFEpLp(x64emu_t *emu, uintptr_t fnc); void iFEppi(x64emu_t *emu, uintptr_t fnc); +void iFEppu(x64emu_t *emu, uintptr_t fnc); void iFEppd(x64emu_t *emu, uintptr_t fnc); void iFEppL(x64emu_t *emu, uintptr_t fnc); void iFEppp(x64emu_t *emu, uintptr_t fnc); @@ -2969,7 +2970,6 @@ void iFipiip(x64emu_t *emu, uintptr_t fnc); #endif #if !defined(NOALIGN) -void iFEppu(x64emu_t *emu, uintptr_t fnc); void iFEiiip(x64emu_t *emu, uintptr_t fnc); void iFEipii(x64emu_t *emu, uintptr_t fnc); void iFEipiip(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedgdk3.c b/src/wrapped/wrappedgdk3.c index aea28c68..f5683288 100644 --- a/src/wrapped/wrappedgdk3.c +++ b/src/wrapped/wrappedgdk3.c @@ -171,6 +171,12 @@ EXPORT uint32_t my3_gdk_threads_add_idle_full(x64emu_t* emu, int priority, void* return my->gdk_threads_add_idle_full(priority, findGSourceFunc(f), data, findGDestroyNotifyFct(d)); } +EXPORT uint32_t my3_gdk_threads_add_timeout_full(x64emu_t* emu, int priotity, uint32_t interval, void* f, void* data, void* d) +{ + return my->gdk_threads_add_timeout_full(priotity, interval, findGSourceFunc(f), data, findGDestroyNotifyFct(d)); +} + + #define PRE_INIT \ if(box64_nogtk) \ return -1; diff --git a/src/wrapped/wrappedgdk3_private.h b/src/wrapped/wrappedgdk3_private.h index 97455ee0..65b6d5d3 100644 --- a/src/wrapped/wrappedgdk3_private.h +++ b/src/wrapped/wrappedgdk3_private.h @@ -567,7 +567,7 @@ GO(gdk_texture_get_height, uFp) //GOM(gdk_threads_add_idle, uFEpp) GOM(gdk_threads_add_idle_full, uFEippp) //GOM(gdk_threads_add_timeout, uFEupp) -//GOM(gdk_threads_add_timeout_full, uFEiuppp) +GOM(gdk_threads_add_timeout_full, uFEiuppp) //GOM(gdk_threads_add_timeout_seconds, uFEupp) //GOM(gdk_threads_add_timeout_seconds_full, uFEiuppp) GO(gdk_threads_enter, vFv) diff --git a/src/wrapped/wrappedgdkx112.c b/src/wrapped/wrappedgdkx112.c index cb627311..9b7bde77 100644 --- a/src/wrapped/wrappedgdkx112.c +++ b/src/wrapped/wrappedgdkx112.c @@ -57,7 +57,52 @@ static void* findFilterFct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for gtk-2 GdkFilterFunc callback\n"); return NULL; } +// GSourceFunc +#define GO(A) \ +static uintptr_t my_GSourceFunc_fct_##A = 0; \ +static int my_GSourceFunc_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my_GSourceFunc_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findGSourceFunc(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_GSourceFunc_fct_##A == (uintptr_t)fct) return my_GSourceFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_GSourceFunc_fct_##A == 0) {my_GSourceFunc_fct_##A = (uintptr_t)fct; return my_GSourceFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for gdk2 GSourceFunc callback\n"); + return NULL; +} +// GDestroyNotify +#define GO(A) \ +static uintptr_t my_GDestroyNotify_fct_##A = 0; \ +static void my_GDestroyNotify_##A(void* data) \ +{ \ + RunFunctionFmt(my_GDestroyNotify_fct_##A, "p", data); \ +} +SUPER() +#undef GO +static void* findGDestroyNotifyFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_GDestroyNotify_fct_##A == (uintptr_t)fct) return my_GDestroyNotify_##A; + SUPER() + #undef GO + #define GO(A) if(my_GDestroyNotify_fct_##A == 0) {my_GDestroyNotify_fct_##A = (uintptr_t)fct; return my_GDestroyNotify_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for gdk2 GDestroyNotify callback\n"); + return NULL; +} +#undef SUPER static void my_event_handler(void* event, my_signal_t* sig) { @@ -120,6 +165,11 @@ EXPORT void my_gdk_window_remove_filter(x64emu_t* emu, void* window, void* f, vo my->gdk_window_remove_filter(window, findFilterFct(f), data); } +EXPORT uint32_t my_gdk_threads_add_timeout_full(x64emu_t* emu, int priotity, uint32_t interval, void* f, void* data, void* d) +{ + return my->gdk_threads_add_timeout_full(priotity, interval, findGSourceFunc(f), data, findGDestroyNotifyFct(d)); +} + #define PRE_INIT \ if(box64_nogtk) \ return -1; diff --git a/src/wrapped/wrappedgdkx112_private.h b/src/wrapped/wrappedgdkx112_private.h index f9c4d6b6..1a90ae4b 100644 --- a/src/wrapped/wrappedgdkx112_private.h +++ b/src/wrapped/wrappedgdkx112_private.h @@ -533,7 +533,7 @@ GO(gdk_text_width_wc, iFppi) //GOM(gdk_threads_add_idle, uFEpp) //GOM(gdk_threads_add_idle_full, uFEippp) //GOM(gdk_threads_add_timeout, uFEupp) -//GOM(gdk_threads_add_timeout_full, uFEiuppp) +GOM(gdk_threads_add_timeout_full, uFEiuppp) //GOM(gdk_threads_add_timeout_seconds, uFEupp) //GOM(gdk_threads_add_timeout_seconds_full, uFEiuppp) GO(gdk_threads_enter, vFv) |