diff -r 4918f9132552 -r 450a813dc2a5 ui/gtk/headerbar.c --- 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