about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedgobject2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wrapped/wrappedgobject2.c')
-rwxr-xr-xsrc/wrapped/wrappedgobject2.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c
index 31b85938..cf57f98d 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;
 }
+// GDestroyFunc ...
+#define GO(A)   \
+static uintptr_t my_destroyfunc_fct_##A = 0;   \
+static int my_destroyfunc_##A(void* a, void* b)     \
+{                                       \
+    return RunFunction(my_context, my_destroyfunc_fct_##A, 2, a, b);\
+}
+SUPER()
+#undef GO
+static void* findDestroyFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_destroyfunc_fct_##A == (uintptr_t)fct) return my_destroyfunc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_destroyfunc_fct_##A == 0) {my_destroyfunc_fct_##A = (uintptr_t)fct; return my_destroyfunc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for gobject GDestroyNotify 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;                                             \
@@ -827,6 +849,18 @@ EXPORT void my_g_object_set(x64emu_t* emu, void* a1, void* a2, uintptr_t* b)
     my->g_object_set_valist(a1, a2, VARARGS);
 }
 
+EXPORT void my_g_object_set_qdata_full(x64emu_t* emu, void* o, void* q, void* data, void* d)
+{
+    gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
+    my->g_object_set_qdata_full(o, q, data, findDestroyFct(d));
+}
+
+EXPORT void my_g_object_class_install_properties(x64emu_t* emu, void* klass, uint32_t n, void* specs)
+{
+    gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
+    my->g_object_class_install_properties(unwrapCopyGTKClass(klass, my->g_object_get_type()), n, specs);
+}
+
 #define PRE_INIT    \
     if(box64_nogtk) \
         return -1;