about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/main.c4
-rwxr-xr-xsrc/tools/gtkclass.c8
-rw-r--r--src/wrapped/generated/functions_list.txt6
-rw-r--r--src/wrapped/generated/wrappedglib2types.h3
-rw-r--r--src/wrapped/generated/wrappedgobject2types.h3
-rwxr-xr-xsrc/wrapped/wrappedglib2.c50
-rwxr-xr-xsrc/wrapped/wrappedglib2_private.h4
-rwxr-xr-xsrc/wrapped/wrappedgobject2.c34
-rwxr-xr-xsrc/wrapped/wrappedgobject2_private.h4
9 files changed, 96 insertions, 20 deletions
diff --git a/src/main.c b/src/main.c
index d1b6e8fe..48c8f99e 100755
--- a/src/main.c
+++ b/src/main.c
@@ -1067,6 +1067,10 @@ int main(int argc, const char **argv, const char **env) {
         printf_log(LOG_INFO, "Zoom detected, trying to use system libturbojpeg if possible\n");
         box64_zoom = 1;
     }
+    if(strstr(prgname, "pressure-vessel-wrap")==prgname) {
+        printf_log(LOG_INFO, "pressure-vessel-wrap detected, disabling GTK\n");
+        box64_nogtk = 1;
+    }
     /*if(strstr(prgname, "awesomium_process")==prgname) {
         printf_log(LOG_INFO, "awesomium_process detected, forcing emulated libpng12\n");
         AddPath("libpng12.so.0", &my_context->box64_emulated_libs, 0);
diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c
index 38896fd5..af1cde5b 100755
--- a/src/tools/gtkclass.c
+++ b/src/tools/gtkclass.c
@@ -735,7 +735,13 @@ static void unwrapGTKClass(void* cl, size_t type)
     else 
 
     GTKCLASSES()
-    {}  // else no warning, one is enough...
+    {
+        if(my_MetaFrames==-1 && !strcmp(g_type_name(type), "MetaFrames")) {
+            my_MetaFrames = type;
+            unwrapMetaFramesClass((my_MetaFramesClass_t*)cl);
+        } else
+            printf_log(LOG_NONE, "Warning, Custom Class initializer with unknown class type %zu (%s)\n", type, g_type_name(type));
+    }
     #undef GTKCLASS
 }
 
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index ccb397a1..8550ed82 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -2293,17 +2293,18 @@ wrappedglib2:
   - g_list_sort
   - g_log_set_default_handler
   - g_slist_sort
+  - g_strjoinv
   - g_variant_new_parsed_va
 - pFpV:
   - g_build_filename
   - g_markup_printf_escaped
+  - g_strconcat
   - g_strdup_printf
   - g_strjoin
   - g_variant_new
 - pFpA:
   - g_markup_vprintf_escaped
   - g_strdup_vprintf
-  - g_strjoinv
 - vFppp:
   - g_array_sort_with_data
   - g_hash_table_foreach
@@ -2417,6 +2418,8 @@ wrappedgobject2:
   - g_value_register_transform_func
 - vFLLp:
   - g_type_add_interface_static
+- vFpup:
+  - g_object_class_install_properties
 - vFppV:
   - g_object_get
   - g_object_set
@@ -2441,6 +2444,7 @@ wrappedgobject2:
   - g_signal_emit_valist
 - vFpppp:
   - g_object_set_data_full
+  - g_object_set_qdata_full
 - LFLppi:
   - g_type_register_static
 - LFupppp:
diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h
index c34dfb6e..3cb07ea9 100644
--- a/src/wrapped/generated/wrappedglib2types.h
+++ b/src/wrapped/generated/wrappedglib2types.h
@@ -91,15 +91,16 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v
 	GO(g_list_sort, pFpp_t) \
 	GO(g_log_set_default_handler, pFpp_t) \
 	GO(g_slist_sort, pFpp_t) \
+	GO(g_strjoinv, pFpp_t) \
 	GO(g_variant_new_parsed_va, pFpp_t) \
 	GO(g_build_filename, pFpV_t) \
 	GO(g_markup_printf_escaped, pFpV_t) \
+	GO(g_strconcat, pFpV_t) \
 	GO(g_strdup_printf, pFpV_t) \
 	GO(g_strjoin, pFpV_t) \
 	GO(g_variant_new, pFpV_t) \
 	GO(g_markup_vprintf_escaped, pFpA_t) \
 	GO(g_strdup_vprintf, pFpA_t) \
-	GO(g_strjoinv, pFpA_t) \
 	GO(g_array_sort_with_data, vFppp_t) \
 	GO(g_hash_table_foreach, vFppp_t) \
 	GO(g_option_context_add_main_entries, vFppp_t) \
diff --git a/src/wrapped/generated/wrappedgobject2types.h b/src/wrapped/generated/wrappedgobject2types.h
index 40943a95..04e6d4ae 100644
--- a/src/wrapped/generated/wrappedgobject2types.h
+++ b/src/wrapped/generated/wrappedgobject2types.h
@@ -16,6 +16,7 @@ typedef int64_t (*iFpp_t)(void*, void*);
 typedef void* (*pFpp_t)(void*, void*);
 typedef void (*vFiip_t)(int64_t, int64_t, void*);
 typedef void (*vFLLp_t)(uintptr_t, uintptr_t, void*);
+typedef void (*vFpup_t)(void*, uint64_t, void*);
 typedef void (*vFppV_t)(void*, void*, ...);
 typedef void (*vFppA_t)(void*, void*, va_list);
 typedef uintptr_t (*LFppp_t)(void*, void*, void*);
@@ -45,6 +46,7 @@ typedef uint64_t (*uFpLippppLuA_t)(void*, uintptr_t, int64_t, void*, void*, void
 	GO(g_value_array_sort, pFpp_t) \
 	GO(g_value_register_transform_func, vFiip_t) \
 	GO(g_type_add_interface_static, vFLLp_t) \
+	GO(g_object_class_install_properties, vFpup_t) \
 	GO(g_object_get, vFppV_t) \
 	GO(g_object_set, vFppV_t) \
 	GO(g_object_get_valist, vFppA_t) \
@@ -58,6 +60,7 @@ typedef uint64_t (*uFpLippppLuA_t)(void*, uintptr_t, int64_t, void*, void*, void
 	GO(g_param_spec_set_qdata_full, vFpupp_t) \
 	GO(g_signal_emit_valist, vFpupA_t) \
 	GO(g_object_set_data_full, vFpppp_t) \
+	GO(g_object_set_qdata_full, vFpppp_t) \
 	GO(g_type_register_static, LFLppi_t) \
 	GO(g_signal_add_emission_hook, LFupppp_t) \
 	GO(g_type_register_fundamental, LFLpppi_t) \
diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c
index c3d59146..1ccdb19e 100755
--- a/src/wrapped/wrappedglib2.c
+++ b/src/wrapped/wrappedglib2.c
@@ -1207,10 +1207,10 @@ EXPORT void* my_g_build_path(x64emu_t *emu, void* sep, void* first, uintptr_t* d
         p = (void*)getVArgs(emu, 2, data, n++);
     }
     ++n;    // final NULL
-    void** args = (void**)malloc(n *sizeof(void*));
+    void** args = (void**)malloc((n+1) *sizeof(void*));
     args[0] = first;
-    for(int i=1; i<n; ++i)
-        args[i] = (void*)getVArgs(emu, 2, data, i-1);
+    for(int i=0; i<n; ++i)
+        args[i+1] = (void*)getVArgs(emu, 2, data, i);
     p = my->g_build_pathv(sep, args);
     free(args);
     return p;
@@ -1398,22 +1398,27 @@ EXPORT void my_g_string_vprintf(x64emu_t* emu, void* string, void* fmt, x64_va_l
     return my->g_string_vprintf(string, fmt, VARARGS);
 }
 
-EXPORT void* my_g_strjoin(x64emu_t* emu, void* a, uintptr_t* b)
+EXPORT void* my_g_strjoin(x64emu_t* emu, void* sep, uintptr_t* data)
 {
     glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
-    CREATE_VALIST_FROM_VAARG(b, emu->scratch, 1);
-    return my->g_strjoinv(a, VARARGS);
+    int n = 0;
+    void* p = (void*)getVArgs(emu, 1, data, 0);
+    while(p) {
+        p = (void*)getVArgs(emu, 1, data, n++);
+    }
+    ++n;    // final NULL
+    void** args = (void**)malloc(n *sizeof(void*));
+    for(int i=0; i<n; ++i)
+        args[i] = (void*)getVArgs(emu, 1, data, i);
+    p = my->g_strjoinv(sep, args);
+    free(args);
+    return p;
 }
 
-EXPORT void* my_g_strjoinv(x64emu_t* emu, void* a, x64_va_list_t V)
+EXPORT void* my_g_strjoinv(x64emu_t* emu, void* a, void** V)
 {
     glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
-    #ifdef CONVERT_VALIST
-    CONVERT_VALIST(V);
-    #else
-    CREATE_VALIST_FROM_VALIST(V, emu->scratch);
-    #endif
-    return my->g_strjoinv(a, VARARGS);
+    return my->g_strjoinv(a, V);
 }
 
 EXPORT void* my_g_option_group_new(x64emu_t* emu, void* name, void* desc, void* help, void* data, void* destroy)
@@ -1452,6 +1457,25 @@ EXPORT void my_g_option_context_add_main_entries(x64emu_t* emu, void* context, m
     }
 }
 
+EXPORT void* my_g_strconcat(x64emu_t* emu, void* first, uintptr_t* data)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+
+    int n = (first)?1:0;
+    void* p = n?((void*)getVArgs(emu, 1, data, 0)):NULL;
+    while(p) {
+        p = (void*)getVArgs(emu, 1, data, n++);
+    }
+    ++n;    // final NULL
+    void** args = (void**)malloc((n+1) *sizeof(void*));
+    args[0] = first;
+    for(int i=0; i<n; ++i)
+        args[i+1] = (void*)getVArgs(emu, 1, data, i);
+    p = my->g_strjoinv(NULL, args);
+    free(args);
+    return p;
+}
+
 
 #define PRE_INIT    \
     if(box64_nogtk) \
diff --git a/src/wrapped/wrappedglib2_private.h b/src/wrapped/wrappedglib2_private.h
index a8463e3d..a0fa8aaa 100755
--- a/src/wrapped/wrappedglib2_private.h
+++ b/src/wrapped/wrappedglib2_private.h
@@ -1140,7 +1140,7 @@ GO(g_strchomp, pFp)
 GO(g_strchug, pFp)
 GO(g_strcmp0, iFpp)
 GO(g_strcompress, pFp)
-//GO(g_strconcat, pFppppppppppppp)    //vaarg, no va_list equivalent...
+GOM(g_strconcat, pFEpV)    //vaarg, no va_list equivalent...
 GO(g_strdelimit, pFppC)
 GO(g_strdown, pFp)
 GO(g_strdup, pFp)
@@ -1197,7 +1197,7 @@ GOM(g_string_vprintf, vFEppA)
 GO(g_strip_context, pFpp)
 GO(g_str_is_ascii, iFp)
 GOM(g_strjoin, pFEpV)
-GOM(g_strjoinv, pFEpA)
+GOM(g_strjoinv, pFEpp)
 GO(g_strlcat, uFppu)
 GO(g_strlcpy, uFppu)
 GO(g_str_match_string, iFppi)
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;
diff --git a/src/wrapped/wrappedgobject2_private.h b/src/wrapped/wrappedgobject2_private.h
index 79a16a6b..1a17d5e7 100755
--- a/src/wrapped/wrappedgobject2_private.h
+++ b/src/wrapped/wrappedgobject2_private.h
@@ -118,7 +118,7 @@ GO(g_object_add_weak_pointer, vFpp)
 //GO(g_object_bind_property_full, 
 //GO(g_object_bind_property_with_closures, 
 GO(g_object_class_find_property, pFpp)
-GO(g_object_class_install_properties, vFpup)
+GOM(g_object_class_install_properties, vFEpup)
 GO(g_object_class_install_property, vFpup)
 GO(g_object_class_list_properties, pFpp)
 GO(g_object_class_override_property, vFpup)
@@ -156,7 +156,7 @@ GO(g_object_set_data, vFppp)
 GOM(g_object_set_data_full, vFEpppp)
 GO(g_object_set_property, vFppp)
 GO(g_object_set_qdata, vFppp)
-//GOM(g_object_set_qdata_full, vFEpppB)
+GOM(g_object_set_qdata_full, vFEpppp)
 GOM(g_object_set_valist, vFEppA)
 GO(g_object_steal_data, pFpp)
 GO(g_object_steal_qdata, pFpp)