about summary refs log tree commit diff stats
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
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
-rw-r--r--src/wrapped/generated/functions_list.txt3
-rw-r--r--src/wrapped/generated/wrappedgobject2types.h3
-rw-r--r--src/wrapped/wrappedgobject2.c38
-rw-r--r--src/wrapped/wrappedgobject2_private.h6
4 files changed, 47 insertions, 3 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index c5cd502e..363754c2 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -4124,7 +4124,10 @@ wrappedgobject2:
 - vFppp:
   - g_closure_add_finalize_notifier
   - g_closure_remove_finalize_notifier
+  - g_object_add_toggle_ref
+  - g_object_remove_toggle_ref
   - g_object_weak_ref
+  - g_object_weak_unref
 - vFppV:
   - g_object_get
   - g_object_set
diff --git a/src/wrapped/generated/wrappedgobject2types.h b/src/wrapped/generated/wrappedgobject2types.h
index f709151d..d68efe65 100644
--- a/src/wrapped/generated/wrappedgobject2types.h
+++ b/src/wrapped/generated/wrappedgobject2types.h
@@ -59,7 +59,10 @@ typedef uint32_t (*uFpLuppppLuA_t)(void*, uintptr_t, uint32_t, void*, void*, voi
 	GO(g_signal_override_class_handler, vFpLp_t) \
 	GO(g_closure_add_finalize_notifier, vFppp_t) \
 	GO(g_closure_remove_finalize_notifier, vFppp_t) \
+	GO(g_object_add_toggle_ref, vFppp_t) \
+	GO(g_object_remove_toggle_ref, vFppp_t) \
 	GO(g_object_weak_ref, vFppp_t) \
+	GO(g_object_weak_unref, vFppp_t) \
 	GO(g_object_get, vFppV_t) \
 	GO(g_object_set, vFppV_t) \
 	GO(g_object_get_valist, vFppA_t) \
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));
diff --git a/src/wrapped/wrappedgobject2_private.h b/src/wrapped/wrappedgobject2_private.h
index 492e296d..d644fbd3 100644
--- a/src/wrapped/wrappedgobject2_private.h
+++ b/src/wrapped/wrappedgobject2_private.h
@@ -112,7 +112,7 @@ GO(g_main_loop_get_type, LFv)
 GO(g_mapped_file_get_type, LFv)
 GO(g_markup_parse_context_get_type, LFv)
 GO(g_match_info_get_type, LFv)
-//GOM(g_object_add_toggle_ref, vFEppp)
+GOM(g_object_add_toggle_ref, vFEppp)
 GO(g_object_add_weak_pointer, vFpp)
 GO(g_object_bind_property, pFppppu)
 //GOM(g_object_bind_property_full, pFppppupppp)
@@ -146,7 +146,7 @@ GO(g_object_notify, vFpp)
 GO(g_object_notify_by_pspec, vFpp)
 GO(g_object_ref, pFp)
 GO(g_object_ref_sink, pFp)
-//GOM(g_object_remove_toggle_ref, vFEppp)
+GOM(g_object_remove_toggle_ref, vFEppp)
 GO(g_object_remove_weak_pointer, vFpp)
 //GOM(g_object_replace_data, iFEpppppp)
 //GOM(g_object_replace_qdata, iFEpupppp)
@@ -164,7 +164,7 @@ GO(g_object_thaw_notify, vFp)
 GO(g_object_unref, vFp)
 GO(g_object_watch_closure, vFpp)    // needs wrapping?
 GOM(g_object_weak_ref, vFEppp)
-GO(g_object_weak_unref, vFppp)  // needs wrapping?
+GOM(g_object_weak_unref, vFEppp)
 GO(g_param_spec_boolean, pFpppii)
 GO(g_param_spec_boxed, pFpppLi)
 GO(g_param_spec_char, pFpppccci)