ui/gtk/headerbar.c

branch
newapi
changeset 311
450a813dc2a5
parent 310
4918f9132552
--- a/ui/gtk/headerbar.c	Thu Sep 26 22:43:13 2024 +0200
+++ b/ui/gtk/headerbar.c	Sun Sep 29 11:29:37 2024 +0200
@@ -29,6 +29,7 @@
 #include "headerbar.h"
 
 #include "button.h"
+#include "menu.h"
 
 #if GTK_MAJOR_VERSION >= 3
 
@@ -71,7 +72,7 @@
             break;
         }
         case UI_TOOLBAR_MENU: {
-            //add_toolitem_menu_widget(tb, (UiToolbarMenuItem*)i, obj);
+            ui_add_headerbar_menu(headerbar, box, (UiToolbarMenuItem*)i, obj, pos);
             break;
         }
         default: fprintf(stderr, "toolbar item type unimplemented: %d\n", (int)i->type);
@@ -119,17 +120,53 @@
     }
 }
 
-void ui_add_headerbar_item(GtkWidget *headerbar, GtkWidget *box, UiToolbarItem *item, UiObject *obj, enum UiToolbarPos pos) {
+void ui_add_headerbar_item(
+        GtkWidget *headerbar,
+        GtkWidget *box,
+        UiToolbarItem *item,
+        UiObject *obj,
+        enum UiToolbarPos pos)
+{
     GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.onclick, item->args.onclickdata);
     WIDGET_ADD_CSS_CLASS(button, "flat");
     headerbar_add(headerbar, box, button, pos);
 }
 
-void ui_add_headerbar_toggleitem(GtkWidget *headerbar, GtkWidget *box, UiToolbarToggleItem *item, UiObject *obj, enum UiToolbarPos pos) {
+void ui_add_headerbar_toggleitem(
+        GtkWidget *headerbar,
+        GtkWidget *box,
+        UiToolbarToggleItem *item,
+        UiObject *obj,
+        enum UiToolbarPos pos)
+{
     GtkWidget *button = gtk_toggle_button_new();
     WIDGET_ADD_CSS_CLASS(button, "flat");
     ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.varname, NULL, item->args.onchange, item->args.onchangedata);
     headerbar_add(headerbar, box, button, pos);
 }
+
+void ui_add_headerbar_menu(
+        GtkWidget *headerbar,
+        GtkWidget *box,
+        UiToolbarMenuItem *item,
+        UiObject *obj,
+        enum UiToolbarPos pos)
+{
+    GtkWidget *menubutton = gtk_menu_button_new();
+    
+    if(item->args.label) {
+        gtk_menu_button_set_label(GTK_MENU_BUTTON(menubutton), item->args.label);
+    }
+    if(item->args.icon) {
+        gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(menubutton), item->args.icon); 
+    }
+   
+    GMenu *menu = g_menu_new();
+    ui_gmenu_add_menu_items(menu, 0, &item->menu, obj);
+    
+    gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(menubutton), G_MENU_MODEL(menu));
+    
+    headerbar_add(headerbar, box, menubutton, pos);
+}
     
 #endif
\ No newline at end of file

mercurial