about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedgobject2.c
diff options
context:
space:
mode:
authorLeslie Zhai <zhaixiang@loongson.cn>2025-08-05 16:23:49 +0800
committerGitHub <noreply@github.com>2025-08-05 10:23:49 +0200
commit1eba5b1af60d466383fc84dc4bb487aef6fa9e1d (patch)
treefc68c5ae58944c94fd12f6dc60509d797e026e0d /src/wrapped/wrappedgobject2.c
parentdaeff6fc41f7c2e879d9d8d95b9b7a8530e3073a (diff)
downloadbox64-1eba5b1af60d466383fc84dc4bb487aef6fa9e1d.tar.gz
box64-1eba5b1af60d466383fc84dc4bb487aef6fa9e1d.zip
[WRAPPER] Wrapped g_object_add_toggle_ref, g_object_remove_toggle_ref (#2897)
and g_object_weak_unref
Diffstat (limited to 'src/wrapped/wrappedgobject2.c')
-rw-r--r--src/wrapped/wrappedgobject2.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c
index 1f71cc95..3f33dfd1 100644
--- a/src/wrapped/wrappedgobject2.c
+++ b/src/wrapped/wrappedgobject2.c
@@ -293,6 +293,29 @@ static void* findWeakNotifyFct(void* fct)
     return NULL;
 }
 
+// GToggleNotify
+#define GO(A)   \
+static uintptr_t my_togglenotifyfunc_fct_##A = 0;                       \
+static int my_togglenotifyfunc_##A(void* a, void* b, int c)             \
+{                                                                       \
+    return RunFunctionFmt(my_togglenotifyfunc_fct_##A, "ppi", a, b, c); \
+}
+SUPER()
+#undef GO
+static void* findToggleNotifyFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_togglenotifyfunc_fct_##A == (uintptr_t)fct) return my_togglenotifyfunc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_togglenotifyfunc_fct_##A == 0) {my_togglenotifyfunc_fct_##A = (uintptr_t)fct; return my_togglenotifyfunc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for gobject GToggleNotify callback\n");
+    return NULL;
+}
+
 // GParamSpecTypeInfo....
 // First the structure GParamSpecTypeInfo statics, with paired x64 source pointer
 typedef struct my_GParamSpecTypeInfo_s {
@@ -847,6 +870,21 @@ EXPORT void my_g_object_weak_ref(x64emu_t* emu, void* object, void* notify, void
     my->g_object_weak_ref(object, findWeakNotifyFct(notify), data);
 }
 
+EXPORT void my_g_object_weak_unref(x64emu_t* emu, void* object, void* notify, void* data)
+{
+    my->g_object_weak_unref(object, findWeakNotifyFct(notify), data);
+}
+
+EXPORT void my_g_object_add_toggle_ref(x64emu_t* emu, void* object, void* notify, void* data)
+{
+    my->g_object_add_toggle_ref(object, findToggleNotifyFct(notify), data);
+}
+
+EXPORT void my_g_object_remove_toggle_ref(x64emu_t* emu, void* object, void* notify, void* data)
+{
+    my->g_object_remove_toggle_ref(object, findToggleNotifyFct(notify), data);
+}
+
 EXPORT void my_g_signal_override_class_handler(x64emu_t* emu, char* name, size_t gtype, void* callback)
 {
     my->g_signal_override_class_handler(name, gtype, findGCallbackFct(callback));