about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-09-19 16:24:43 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-09-19 16:24:43 +0200
commit510f8d45e80a3cb5297f6dc2522309598a09959c (patch)
treecc7c2370e17d1e1b50af4cf0d6561f0ecd0dea5e /src
parentc5d328a5dab491738fc59325b0e819fb925bb530 (diff)
downloadbox64-510f8d45e80a3cb5297f6dc2522309598a09959c.tar.gz
box64-510f8d45e80a3cb5297f6dc2522309598a09959c.zip
Added wrapped g_signal_connect_object
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt3
-rw-r--r--src/wrapped/generated/wrappedgobject2types.h2
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rwxr-xr-xsrc/wrapped/wrappedgobject2.c31
-rwxr-xr-xsrc/wrapped/wrappedgobject2_private.h2
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)