Thu, 09 Oct 2025 18:23:07 +0200
implement tooltips for toolbar items (GTK)
| ui/common/toolbar.c | file | annotate | diff | comparison | revisions | |
| ui/gtk/button.c | file | annotate | diff | comparison | revisions | |
| ui/gtk/button.h | file | annotate | diff | comparison | revisions | |
| ui/gtk/headerbar.c | file | annotate | diff | comparison | revisions | |
| ui/gtk/toolbar.c | file | annotate | diff | comparison | revisions | |
| ui/gtk/window.c | file | annotate | diff | comparison | revisions | |
| ui/ui/toolbar.h | file | annotate | diff | comparison | revisions |
--- a/ui/common/toolbar.c Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/common/toolbar.c Thu Oct 09 18:23:07 2025 +0200 @@ -55,6 +55,7 @@ newargs.label = nl_strdup(args->label); newargs.stockid = nl_strdup(args->stockid); newargs.icon = nl_strdup(args->icon); + newargs.tooltip = nl_strdup(args->tooltip); newargs.onclick = args->onclick; newargs.onclickdata = args->onclickdata; newargs.groups = uic_copy_groups(args->groups, ngroups); @@ -74,6 +75,7 @@ newargs.label = nl_strdup(args->label); newargs.stockid = nl_strdup(args->stockid); newargs.icon = nl_strdup(args->icon); + newargs.tooltip = nl_strdup(args->tooltip); newargs.varname = nl_strdup(args->varname); newargs.onchange = args->onchange; newargs.onchangedata = args->onchangedata; @@ -93,6 +95,7 @@ newargs.label = nl_strdup(args->label); newargs.stockid = nl_strdup(args->stockid); newargs.icon = nl_strdup(args->icon); + newargs.tooltip = nl_strdup(args->tooltip); return newargs; }
--- a/ui/gtk/button.c Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/gtk/button.c Thu Oct 09 18:23:07 2025 +0200 @@ -60,6 +60,7 @@ UiObject *obj, const char *label, const char *icon, + const char *tooltip, ui_callback onclick, void *userdata, int event_value, @@ -67,6 +68,9 @@ { GtkWidget *button = gtk_button_new_with_label(label); ui_button_set_icon_name(button, icon); + if(tooltip) { + gtk_widget_set_tooltip_text(button, tooltip); + } if(onclick) { UiEventData *event = malloc(sizeof(UiEventData)); @@ -100,7 +104,7 @@ } UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) { - GtkWidget *button = ui_create_button(obj, args->label, args->icon, args->onclick, args->onclickdata, 0, FALSE); + GtkWidget *button = ui_create_button(obj, args->label, args->icon, NULL/*tooltip*/, args->onclick, args->onclickdata, 0, FALSE); ui_set_name_and_style(button, args->name, args->style_class); ui_set_widget_groups(obj->ctx, button, args->groups); UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; @@ -181,6 +185,7 @@ GtkWidget *togglebutton, const char *label, const char *icon, + const char *tooltip, const char *varname, UiInteger *value, ui_callback onchange, @@ -191,6 +196,9 @@ gtk_button_set_label(GTK_BUTTON(togglebutton), label); } ui_button_set_icon_name(togglebutton, icon); + if(tooltip) { + gtk_widget_set_tooltip_text(togglebutton, tooltip); + } ui_bind_togglebutton( obj, @@ -295,6 +303,7 @@ widget, args->label, args->icon, + NULL, // tooltip args->varname, args->value, args->onchange,
--- a/ui/gtk/button.h Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/gtk/button.h Thu Oct 09 18:23:07 2025 +0200 @@ -55,6 +55,7 @@ UiObject *obj, const char *label, const char *icon, + const char *tooltip, ui_callback onclick, void *userdata, int event_value, @@ -65,6 +66,7 @@ GtkWidget *togglebutton, const char *label, const char *icon, + const char *tooltip, const char *varname, UiInteger *value, ui_callback onchange,
--- a/ui/gtk/headerbar.c Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/gtk/headerbar.c Thu Oct 09 18:23:07 2025 +0200 @@ -163,7 +163,7 @@ UiObject *obj, enum UiToolbarPos pos) { - GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.onclick, item->args.onclickdata, 0, FALSE); + GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.tooltip, item->args.onclick, item->args.onclickdata, 0, FALSE); ui_set_widget_groups(obj->ctx, button, item->args.groups); WIDGET_ADD_CSS_CLASS(button, "flat"); headerbar_add(headerbar, box, button, pos); @@ -179,7 +179,7 @@ GtkWidget *button = gtk_toggle_button_new(); ui_set_widget_groups(obj->ctx, button, item->args.groups); 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, 0); + ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, NULL/*tooltip*/, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, 0); headerbar_add(headerbar, box, button, pos); }
--- a/ui/gtk/toolbar.c Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/gtk/toolbar.c Thu Oct 09 18:23:07 2025 +0200 @@ -138,6 +138,9 @@ } else { button = gtk_tool_button_new(NULL, item->args.label); } + if(item->args.tooltip) { + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), item->args.tooltip); + } gtk_tool_item_set_homogeneous(button, FALSE); if(item->args.icon) { @@ -192,6 +195,9 @@ set_toolbutton_icon(button, item->args.icon); } } + if(item->args.tooltip) { + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), item->args.tooltip); + } ui_set_widget_ngroups(obj->ctx, GTK_WIDGET(button), item->args.groups, item->ngroups); UiVar* var = uic_widget_var(obj->ctx, obj->ctx, NULL, item->args.varname, UI_VAR_INTEGER); @@ -297,6 +303,9 @@ if(item->args.icon) { set_toolbutton_icon(button, item->args.icon); } + if(item->args.tooltip) { + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), item->args.tooltip); + } gtk_tool_item_set_is_important(button, TRUE); gtk_toolbar_insert(tb, button, -1);
--- a/ui/gtk/window.c Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/gtk/window.c Thu Oct 09 18:23:07 2025 +0200 @@ -945,7 +945,7 @@ } if(args->lbutton1) { - GtkWidget *button = ui_create_button(obj, args->lbutton1, NULL, args->onclick, args->onclickdata, 1, args->default_button == 1); + GtkWidget *button = ui_create_button(obj, args->lbutton1, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 1, args->default_button == 1); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); if(args->default_button == 1) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -953,7 +953,7 @@ } } if(args->lbutton2) { - GtkWidget *button = ui_create_button(obj, args->lbutton2, NULL, args->onclick, args->onclickdata, 2, args->default_button == 2); + GtkWidget *button = ui_create_button(obj, args->lbutton2, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 2, args->default_button == 2); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); if(args->default_button == 2) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -962,7 +962,7 @@ } if(args->rbutton4) { - GtkWidget *button = ui_create_button(obj, args->rbutton4, NULL, args->onclick, args->onclickdata, 4, args->default_button == 4); + GtkWidget *button = ui_create_button(obj, args->rbutton4, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 4, args->default_button == 4); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); if(args->default_button == 4) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -970,7 +970,7 @@ } } if(args->rbutton3) { - GtkWidget *button = ui_create_button(obj, args->rbutton3, NULL, args->onclick, args->onclickdata, 3, args->default_button == 3); + GtkWidget *button = ui_create_button(obj, args->rbutton3, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 3, args->default_button == 3); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); if(args->default_button == 3) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -991,7 +991,7 @@ gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE); if(args->lbutton1) { - GtkWidget *button = ui_create_button(obj, args->lbutton1, NULL, args->onclick, args->onclickdata, 1, args->default_button == 1); + GtkWidget *button = ui_create_button(obj, args->lbutton1, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 1, args->default_button == 1); gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1); if(args->default_button == 1) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -999,7 +999,7 @@ } } if(args->lbutton2) { - GtkWidget *button = ui_create_button(obj, args->lbutton2, NULL, args->onclick, args->onclickdata, 2, args->default_button == 2); + GtkWidget *button = ui_create_button(obj, args->lbutton2, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 2, args->default_button == 2); gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1); if(args->default_button == 2) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -1010,7 +1010,7 @@ gtk_widget_set_hexpand(space, TRUE); gtk_grid_attach(GTK_GRID(grid), space, 2, 0, 1, 1); if(args->rbutton3) { - GtkWidget *button = ui_create_button(obj, args->rbutton3, NULL, args->onclick, args->onclickdata, 3, args->default_button == 3); + GtkWidget *button = ui_create_button(obj, args->rbutton3, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 3, args->default_button == 3); gtk_grid_attach(GTK_GRID(grid), button, 3, 0, 1, 1); if(args->default_button == 3) { WIDGET_ADD_CSS_CLASS(button, "suggested-action"); @@ -1018,7 +1018,7 @@ } } if(args->rbutton4) { - GtkWidget *button = ui_create_button(obj, args->rbutton4, NULL, args->onclick, args->onclickdata, 4, args->default_button == 4); + GtkWidget *button = ui_create_button(obj, args->rbutton4, NULL, NULL/*tooltip*/, args->onclick, args->onclickdata, 4, args->default_button == 4); gtk_grid_attach(GTK_GRID(grid), button, 4, 0, 1, 1); if(args->default_button == 4) { WIDGET_ADD_CSS_CLASS(button, "suggested-action");
--- a/ui/ui/toolbar.h Thu Oct 09 12:49:53 2025 +0200 +++ b/ui/ui/toolbar.h Thu Oct 09 18:23:07 2025 +0200 @@ -37,9 +37,10 @@ #endif typedef struct UiToolbarItemArgs { - const char* label; - const char* stockid; - const char* icon; + const char *label; + const char *stockid; + const char *icon; + const char *tooltip; ui_callback onclick; void* onclickdata; @@ -48,21 +49,23 @@ } UiToolbarItemArgs; typedef struct UiToolbarToggleItemArgs { - const char* label; - const char* stockid; - const char* icon; + const char *label; + const char *stockid; + const char *icon; + const char *tooltip; - const char* varname; + const char *varname; ui_callback onchange; - void* onchangedata; + void *onchangedata; const int *groups; } UiToolbarToggleItemArgs; typedef struct UiToolbarMenuArgs { - const char* label; - const char* stockid; - const char* icon; + const char *label; + const char *stockid; + const char *icon; + const char *tooltip; } UiToolbarMenuArgs; enum UiToolbarPos {