diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-03-19 21:20:02 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-03-19 21:20:02 +0100 |
| commit | d7ab5e25f03fbff0bd2ba6a5c6b528a4687381ff (patch) | |
| tree | 9ff29354c5461741b796cbbe6ebed80ea80ecfab | |
| parent | 5a563f1cc65a0e809d151132f9bdbb7f330cd5e6 (diff) | |
| download | box64-d7ab5e25f03fbff0bd2ba6a5c6b528a4687381ff.tar.gz box64-d7ab5e25f03fbff0bd2ba6a5c6b528a4687381ff.zip | |
Some more gtk wrapping work
| -rwxr-xr-x | src/include/gtkclass.h | 25 | ||||
| -rwxr-xr-x | src/tools/gtkclass.c | 82 | ||||
| -rwxr-xr-x | src/wrapped/wrappedgtkx112.c | 4 |
3 files changed, 111 insertions, 0 deletions
diff --git a/src/include/gtkclass.h b/src/include/gtkclass.h index 17c4be21..37eab17e 100755 --- a/src/include/gtkclass.h +++ b/src/include/gtkclass.h @@ -318,6 +318,29 @@ typedef struct my_GtkFrameClass_s { void (*compute_child_allocation) (void* frame, void* allocation); } my_GtkFrameClass_t; +typedef struct my_GtkMenuShellClass_s { + my_GtkContainerClass_t parent_class; + void (*deactivate) (void* menu_shell); + void (*selection_done) (void* menu_shell); + void (*move_current) (void* menu_shell, int direction); + void (*activate_current) (void* menu_shell, int force_hide); + void (*cancel) (void* menu_shell); + void (*select_item) (void* menu_shell, void* menu_item); + void (*insert) (void* menu_shell, void* child, int position); + int (*get_popup_delay) (void* menu_shell); + int (*move_selected) (void* menu_shell, int distance); + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); +} my_GtkMenuShellClass_t; + +typedef struct my_GtkMenuBarClass_s { + my_GtkMenuShellClass_t parent_class; + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); + void (*_gtk_reserved4) (void); +} my_GtkMenuBarClass_t; + typedef struct my_MetaFramesClass_s { my_GtkWindowClass_t parent_class; @@ -410,6 +433,8 @@ GTKCLASS(GtkSpinButton) \ GTKCLASS(GtkProgress) \ GTKCLASS(GtkProgressBar)\ GTKCLASS(GtkFrame) \ +GTKCLASS(GtkMenuShell) \ +GTKCLASS(GtkMenuBar) \ GTKCLASS(MetaFrames) \ #define GTKCLASS(A) void Set##A##ID(size_t id); diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c index 3f6ef0d3..c3ee1ed4 100755 --- a/src/tools/gtkclass.c +++ b/src/tools/gtkclass.c @@ -1054,6 +1054,88 @@ static void bridgeGtkFrameClass(my_GtkFrameClass_t* class) #undef SUPERGO +// ----- GtkMenuShellClass ------ +// wrapper x86 -> natives of callbacks +WRAPPER(GtkMenuShell,deactivate, void, (void* menu_shell), 1, menu_shell); +WRAPPER(GtkMenuShell,selection_done, void, (void* menu_shell), 1, menu_shell); +WRAPPER(GtkMenuShell,move_current, void, (void* menu_shell, int direction), 2, menu_shell, direction); +WRAPPER(GtkMenuShell,activate_current, void,(void* menu_shell, int force_hide), 2, menu_shell, force_hide); +WRAPPER(GtkMenuShell,cancel, void, (void* menu_shell), 1, menu_shell); +WRAPPER(GtkMenuShell,select_item, void, (void* menu_shell, void* menu_item), 2, menu_shell, menu_item); +WRAPPER(GtkMenuShell,insert, void, (void* menu_shell, void* child, int position), 3, menu_shell, child, position); +WRAPPER(GtkMenuShell,get_popup_delay, int, (void* menu_shell), 1, menu_shell); +WRAPPER(GtkMenuShell,move_selected, int, (void* menu_shell, int distance), 2, menu_shell, distance); + +#define SUPERGO() \ + GO(deactivate, vFp); \ + GO(selection_done, vFp); \ + GO(move_current, vFpi); \ + GO(activate_current, vFpi); \ + GO(cancel, vFp); \ + GO(select_item, vFpp); \ + GO(insert, vFppi); \ + GO(get_popup_delay, iFp); \ + GO(move_selected, iFpi); \ + +// wrap (so bridge all calls, just in case) +static void wrapGtkMenuShellClass(my_GtkMenuShellClass_t* class) +{ + wrapGtkContainerClass(&class->parent_class); + #define GO(A, W) class->A = reverse_##A##_GtkMenuShell (W, class->A) + SUPERGO() + #undef GO +} +// unwrap (and use callback if not a native call anymore) +static void unwrapGtkMenuShellClass(my_GtkMenuShellClass_t* class) +{ + unwrapGtkContainerClass(&class->parent_class); + #define GO(A, W) class->A = find_##A##_GtkMenuShell (class->A) + SUPERGO() + #undef GO +} +// autobridge +static void bridgeGtkMenuShellClass(my_GtkMenuShellClass_t* class) +{ + bridgeGtkContainerClass(&class->parent_class); + #define GO(A, W) autobridge_##A##_GtkMenuShell (W, class->A) + SUPERGO() + #undef GO +} + +#undef SUPERGO + +// ----- GtkMenuBarClass ------ +// no wrapper x86 -> natives of callbacks + +#define SUPERGO() \ + +// wrap (so bridge all calls, just in case) +static void wrapGtkMenuBarClass(my_GtkMenuBarClass_t* class) +{ + wrapGtkMenuShellClass(&class->parent_class); + #define GO(A, W) class->A = reverse_##A##_GtkMenuBar (W, class->A) + SUPERGO() + #undef GO +} +// unwrap (and use callback if not a native call anymore) +static void unwrapGtkMenuBarClass(my_GtkMenuBarClass_t* class) +{ + unwrapGtkMenuShellClass(&class->parent_class); + #define GO(A, W) class->A = find_##A##_GtkMenuBar (class->A) + SUPERGO() + #undef GO +} +// autobridge +static void bridgeGtkMenuBarClass(my_GtkMenuBarClass_t* class) +{ + bridgeGtkMenuShellClass(&class->parent_class); + #define GO(A, W) autobridge_##A##_GtkMenuBar (W, class->A) + SUPERGO() + #undef GO +} + +#undef SUPERGO + // No more wrap/unwrap #undef WRAPPER #undef FIND diff --git a/src/wrapped/wrappedgtkx112.c b/src/wrapped/wrappedgtkx112.c index 219d14fb..f86fbbd2 100755 --- a/src/wrapped/wrappedgtkx112.c +++ b/src/wrapped/wrappedgtkx112.c @@ -61,6 +61,8 @@ typedef unsigned long (*LFpppppi_t)(void*, void*, void*, void*, void*, int); GO(gtk_spin_button_get_type, LFv_t) \ GO(gtk_progress_get_type, LFv_t) \ GO(gtk_progress_bar_get_type, LFv_t) \ + GO(gtk_menu_shell_get_type, LFv_t) \ + GO(gtk_menu_bar_get_type, LFv_t) \ GO(gtk_action_get_type, LFv_t) \ GO(g_type_class_ref, pFL_t) \ GO(g_type_class_unref, vFp_t) \ @@ -1190,6 +1192,8 @@ EXPORT void* my_gtk_link_button_set_uri_hook(x64emu_t* emu, void* f, void* data, SetGtkProgressID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_progress_get_type()); \ SetGtkProgressBarID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_progress_bar_get_type());\ SetGtkFrameID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_frame_get_type()); \ + SetGtkMenuShellID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_menu_shell_get_type()); \ + SetGtkMenuBarID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_menu_bar_get_type()); \ lib->priv.w.needed = 2; \ lib->priv.w.neededlibs = (char**)calloc(lib->priv.w.needed, sizeof(char*)); \ lib->priv.w.neededlibs[0] = strdup("libgdk-x11-2.0.so.0"); \ |