diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-09-19 16:24:43 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-09-19 16:24:43 +0200 |
| commit | 510f8d45e80a3cb5297f6dc2522309598a09959c (patch) | |
| tree | cc7c2370e17d1e1b50af4cf0d6561f0ecd0dea5e /src | |
| parent | c5d328a5dab491738fc59325b0e819fb925bb530 (diff) | |
| download | box64-510f8d45e80a3cb5297f6dc2522309598a09959c.tar.gz box64-510f8d45e80a3cb5297f6dc2522309598a09959c.zip | |
Added wrapped g_signal_connect_object
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedgobject2types.h | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rwxr-xr-x | src/wrapped/wrappedgobject2.c | 31 | ||||
| -rwxr-xr-x | src/wrapped/wrappedgobject2_private.h | 2 |
6 files changed, 40 insertions, 1 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index b6e8589f..51d6d6b8 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -1316,6 +1316,7 @@ #() lFipLpLL #() LFEupppp #() LFELpppi +#() LFEppppi #() LFpipipi #() LFpLippp #() LFSpLiip @@ -2225,6 +2226,8 @@ wrappedgobject2: - g_signal_add_emission_hook - LFLpppi: - g_type_register_fundamental +- LFppppi: + - g_signal_connect_object - LFpppppu: - g_signal_connect_data - uFpiupppp: diff --git a/src/wrapped/generated/wrappedgobject2types.h b/src/wrapped/generated/wrappedgobject2types.h index 5e859825..40943a95 100644 --- a/src/wrapped/generated/wrappedgobject2types.h +++ b/src/wrapped/generated/wrappedgobject2types.h @@ -30,6 +30,7 @@ typedef void (*vFpppp_t)(void*, void*, void*, void*); typedef uintptr_t (*LFLppi_t)(uintptr_t, void*, void*, int64_t); typedef uintptr_t (*LFupppp_t)(uint64_t, void*, void*, void*, void*); typedef uintptr_t (*LFLpppi_t)(uintptr_t, void*, void*, void*, int64_t); +typedef uintptr_t (*LFppppi_t)(void*, void*, void*, void*, int64_t); typedef uintptr_t (*LFpppppu_t)(void*, void*, void*, void*, void*, uint64_t); typedef uint64_t (*uFpiupppp_t)(void*, int64_t, uint64_t, void*, void*, void*, void*); typedef uintptr_t (*LFLpLpLpi_t)(uintptr_t, void*, uintptr_t, void*, uintptr_t, void*, int64_t); @@ -60,6 +61,7 @@ typedef uint64_t (*uFpLippppLuA_t)(void*, uintptr_t, int64_t, void*, void*, void GO(g_type_register_static, LFLppi_t) \ GO(g_signal_add_emission_hook, LFupppp_t) \ GO(g_type_register_fundamental, LFLpppi_t) \ + GO(g_signal_connect_object, LFppppi_t) \ GO(g_signal_connect_data, LFpppppu_t) \ GO(g_signal_handlers_block_matched, uFpiupppp_t) \ GO(g_signal_handlers_disconnect_matched, uFpiupppp_t) \ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 9e1f807b..b3e49317 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1350,6 +1350,7 @@ typedef intptr_t (*lFipLipp_t)(int64_t, void*, uintptr_t, int64_t, void*, void*) typedef intptr_t (*lFipLpLL_t)(int64_t, void*, uintptr_t, void*, uintptr_t, uintptr_t); typedef uintptr_t (*LFEupppp_t)(x64emu_t*, uint64_t, void*, void*, void*, void*); typedef uintptr_t (*LFELpppi_t)(x64emu_t*, uintptr_t, void*, void*, void*, int64_t); +typedef uintptr_t (*LFEppppi_t)(x64emu_t*, void*, void*, void*, void*, int64_t); typedef uintptr_t (*LFpipipi_t)(void*, int64_t, void*, int64_t, void*, int64_t); typedef uintptr_t (*LFpLippp_t)(void*, uintptr_t, int64_t, void*, void*, void*); typedef uintptr_t (*LFSpLiip_t)(void*, void*, uintptr_t, int64_t, int64_t, void*); @@ -3224,6 +3225,7 @@ void lFipLipp(x64emu_t *emu, uintptr_t fcn) { lFipLipp_t fn = (lFipLipp_t)fcn; R void lFipLpLL(x64emu_t *emu, uintptr_t fcn) { lFipLpLL_t fn = (lFipLpLL_t)fcn; R_RAX=(intptr_t)fn((int64_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } void LFEupppp(x64emu_t *emu, uintptr_t fcn) { LFEupppp_t fn = (LFEupppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint64_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void LFELpppi(x64emu_t *emu, uintptr_t fcn) { LFELpppi_t fn = (LFELpppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8); } +void LFEppppi(x64emu_t *emu, uintptr_t fcn) { LFEppppi_t fn = (LFEppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8); } void LFpipipi(x64emu_t *emu, uintptr_t fcn) { LFpipipi_t fn = (LFpipipi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (void*)R_R8, (int64_t)R_R9); } void LFpLippp(x64emu_t *emu, uintptr_t fcn) { LFpLippp_t fn = (LFpLippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void LFSpLiip(x64emu_t *emu, uintptr_t fcn) { LFSpLiip_t fn = (LFSpLiip_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 8854aa62..2666eb5d 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1349,6 +1349,7 @@ void lFipLipp(x64emu_t *emu, uintptr_t fnc); void lFipLpLL(x64emu_t *emu, uintptr_t fnc); void LFEupppp(x64emu_t *emu, uintptr_t fnc); void LFELpppi(x64emu_t *emu, uintptr_t fnc); +void LFEppppi(x64emu_t *emu, uintptr_t fnc); void LFpipipi(x64emu_t *emu, uintptr_t fnc); void LFpLippp(x64emu_t *emu, uintptr_t fnc); void LFSpLiip(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c index 87587287..5b8653fc 100755 --- a/src/wrapped/wrappedgobject2.c +++ b/src/wrapped/wrappedgobject2.c @@ -375,6 +375,28 @@ static void* findValueTransformFct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for gobject Value Transform callback\n"); return NULL; } +// GCallback (generic function with 6 arguments, hopefully it's enough) +#define GO(A) \ +static uintptr_t my_GCallback_fct_##A = 0; \ +static void* my_GCallback_##A(void* a, void* b, void* c, void* d, void* e, void* f) \ +{ \ + return (void*)RunFunction(my_context, my_GCallback_fct_##A, 6, a, b, c, d, e, f); \ +} +SUPER() +#undef GO +static void* findGCallbackFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_GCallback_fct_##A == (uintptr_t)fct) return my_GCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my_GCallback_fct_##A == 0) {my_GCallback_fct_##A = (uintptr_t)fct; return my_GCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for gobject Value Transform callback\n"); + return NULL; +} // GParamSpecTypeInfo.... // First the structure GParamSpecTypeInfo statics, with paired x64 source pointer typedef struct my_GParamSpecTypeInfo_s { @@ -514,6 +536,15 @@ static void* findcompareFct(void* fct) } #undef SUPER +EXPORT uintptr_t my_g_signal_connect_object(x64emu_t* emu, void* instance, void* detailed, void* c_handler, void* object, uint32_t flags) +{ + gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2; + + //TODO: get the type of instance to be more precise below + + return my->g_signal_connect_object(instance, detailed, findGCallbackFct(c_handler), object, flags); +} + EXPORT int my_g_boxed_type_register_static(x64emu_t* emu, void* name, void* boxed_copy, void* boxed_free) { gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2; diff --git a/src/wrapped/wrappedgobject2_private.h b/src/wrapped/wrappedgobject2_private.h index 39c61826..79a16a6b 100755 --- a/src/wrapped/wrappedgobject2_private.h +++ b/src/wrapped/wrappedgobject2_private.h @@ -227,7 +227,7 @@ GO(g_signal_chain_from_overridden, vFpp) GO(g_signal_connect_closure, LFpppi) GO(g_signal_connect_closure_by_id, LFpuppi) GOM(g_signal_connect_data, LFEpppppu) -//GOM(g_signal_connect_object, LFEppBpi) +GOM(g_signal_connect_object, LFEppppi) GOM(g_signal_emit, vFEpuuV) GO(g_signal_emit_by_name, vFppppppppppp) //vaarg GO(g_signal_emitv, vFpuup) |