diff options
| author | Leslie Zhai <zhaixiang@loongson.cn> | 2025-08-05 16:23:49 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-05 10:23:49 +0200 |
| commit | 1eba5b1af60d466383fc84dc4bb487aef6fa9e1d (patch) | |
| tree | fc68c5ae58944c94fd12f6dc60509d797e026e0d | |
| parent | daeff6fc41f7c2e879d9d8d95b9b7a8530e3073a (diff) | |
| download | box64-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.txt | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedgobject2types.h | 3 | ||||
| -rw-r--r-- | src/wrapped/wrappedgobject2.c | 38 | ||||
| -rw-r--r-- | src/wrapped/wrappedgobject2_private.h | 6 |
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) |