about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-03-19 21:20:02 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-03-19 21:20:02 +0100
commitd7ab5e25f03fbff0bd2ba6a5c6b528a4687381ff (patch)
tree9ff29354c5461741b796cbbe6ebed80ea80ecfab
parent5a563f1cc65a0e809d151132f9bdbb7f330cd5e6 (diff)
downloadbox64-d7ab5e25f03fbff0bd2ba6a5c6b528a4687381ff.tar.gz
box64-d7ab5e25f03fbff0bd2ba6a5c6b528a4687381ff.zip
Some more gtk wrapping work
-rwxr-xr-xsrc/include/gtkclass.h25
-rwxr-xr-xsrc/tools/gtkclass.c82
-rwxr-xr-xsrc/wrapped/wrappedgtkx112.c4
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");                  \