From c66ca3cab2061c08f0ac1c03afc9c237e31fff4a Mon Sep 17 00:00:00 2001 From: Lev Babiev Date: Sun, 9 Feb 2025 11:54:35 +0000 Subject: [PATCH] gui/menuitem: implement support for veriable tooltips --- src/config/menu.c | 2 +- src/gui/menuitem.c | 7 +++++-- src/gui/menuitem.h | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/config/menu.c b/src/config/menu.c index 6d5644ea..79def1c2 100644 --- a/src/config/menu.c +++ b/src/config/menu.c @@ -23,7 +23,7 @@ static gboolean config_menu_item_props ( GScanner *scanner, GtkWidget *item ) menu_item_set_action(item, config_assign_action(scanner, "action")); break; case G_TOKEN_TOOLTIP: - menu_item_set_tooltip(item, config_assign_string(scanner, "tooltip")); + menu_item_set_tooltip(item, config_assign_expr(scanner, "tooltip")); break; case G_TOKEN_INDEX: menu_item_set_sort_index(item, config_assign_number(scanner, "index")); diff --git a/src/gui/menuitem.c b/src/gui/menuitem.c index 3d39f053..531dc1b9 100644 --- a/src/gui/menuitem.c +++ b/src/gui/menuitem.c @@ -191,14 +191,15 @@ void menu_item_set_icon ( GtkWidget *self, const gchar *icon ) priv->flags |= MI_ICON; } -void menu_item_set_tooltip ( GtkWidget *self, gchar *tooltip ) +void menu_item_set_tooltip ( GtkWidget *self, GBytes *code ) { MenuItemPrivate *priv; priv = g_object_get_data(G_OBJECT(self), "menu_item_private"); g_return_if_fail(priv); - gtk_widget_set_tooltip_text(self, tooltip); + g_clear_pointer(&priv->tooltip_expr, expr_cache_free); + priv->tooltip_expr = expr_cache_new_with_code(code); priv->flags |= MI_TOOLTIP; } @@ -347,6 +348,8 @@ void menu_item_label_update ( GtkWidget *self ) if(expr_cache_eval(priv->label_expr)) menu_item_set_label(self, priv->label_expr->cache); + if(expr_cache_eval(priv->tooltip_expr)) + gtk_widget_set_tooltip_text(self, priv->tooltip_expr->cache); } void menu_item_insert ( GtkWidget *menu, GtkWidget *item ) diff --git a/src/gui/menuitem.h b/src/gui/menuitem.h index 89521e2c..e8e6c3d7 100644 --- a/src/gui/menuitem.h +++ b/src/gui/menuitem.h @@ -16,6 +16,7 @@ typedef struct _MenuItemPrivate { GtkWidget *menu; GBytes *action; expr_cache_t *label_expr; + expr_cache_t *tooltip_expr; } MenuItemPrivate; enum { @@ -35,7 +36,7 @@ void menu_item_set_label ( GtkWidget *self, const gchar *label ); void menu_item_set_label_expr ( GtkWidget *self, GBytes *code ); void menu_item_set_icon ( GtkWidget *self, const gchar *icon ); void menu_item_set_action ( GtkWidget *self, GBytes *action ); -void menu_item_set_tooltip ( GtkWidget *self, gchar *tooltip ); +void menu_item_set_tooltip ( GtkWidget *self, GBytes *tooltip ); void menu_item_set_sort_index ( GtkWidget *self, gint index ); gint menu_item_get_sort_index ( GtkWidget *self ); void menu_item_set_submenu ( GtkWidget *self, gchar *subname );