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 /src/wrapped/wrappedgobject2.c | |
| 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
Diffstat (limited to 'src/wrapped/wrappedgobject2.c')
| -rw-r--r-- | src/wrapped/wrappedgobject2.c | 38 |
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)); |