diff options
| -rwxr-xr-x | src/main.c | 4 | ||||
| -rwxr-xr-x | src/tools/gtkclass.c | 8 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 6 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedglib2types.h | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedgobject2types.h | 3 | ||||
| -rwxr-xr-x | src/wrapped/wrappedglib2.c | 50 | ||||
| -rwxr-xr-x | src/wrapped/wrappedglib2_private.h | 4 | ||||
| -rwxr-xr-x | src/wrapped/wrappedgobject2.c | 34 | ||||
| -rwxr-xr-x | src/wrapped/wrappedgobject2_private.h | 4 |
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) |