From 5983befd5b1039527659be22e0ada31d402b9dbc Mon Sep 17 00:00:00 2001 From: deepend Date: Sun, 1 Mar 2026 10:14:41 -0700 Subject: [PATCH] icons: add system_icon_name API, make gtkutil fall back via resolver registry --- src/fe-gtk/gtkutil.c | 15 ++++++++------- src/fe-gtk/icon-resolver.c | 11 +++++++++++ src/fe-gtk/icon-resolver.h | 1 + 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c index 579418c3..9d49b6c5 100644 --- a/src/fe-gtk/gtkutil.c +++ b/src/fe-gtk/gtkutil.c @@ -122,6 +122,8 @@ gtkutil_image_new_from_stock (const char *stock, GtkIconSize size) { GtkWidget *image; const char *icon_name; + const char *resolved_icon_name = NULL; + int action; icon_name = gtkutil_icon_name_from_stock (stock); if (!icon_name && stock && g_str_has_prefix (stock, "zc-menu-")) @@ -131,14 +133,13 @@ gtkutil_image_new_from_stock (const char *stock, GtkIconSize size) if (image) return image; - if (icon_name && g_str_has_prefix (icon_name, "zc-menu-")) - { - const char *fallback_icon = icon_resolver_icon_name_for_menu_custom (icon_name); - if (fallback_icon) - icon_name = fallback_icon; - } + if (icon_resolver_menu_action_from_name (icon_name, &action)) + resolved_icon_name = icon_resolver_system_icon_name (ICON_RESOLVER_ROLE_MENU_ACTION, action); - return gtk_image_new_from_icon_name (icon_name, size); + if (!resolved_icon_name) + resolved_icon_name = icon_name; + + return gtk_image_new_from_icon_name (resolved_icon_name, size); } GtkWidget * diff --git a/src/fe-gtk/icon-resolver.c b/src/fe-gtk/icon-resolver.c index f4fc753d..b23441d5 100644 --- a/src/fe-gtk/icon-resolver.c +++ b/src/fe-gtk/icon-resolver.c @@ -235,6 +235,17 @@ icon_resolver_menu_action_from_custom (const char *custom_icon_name, int *action return TRUE; } +const char * +icon_resolver_system_icon_name (IconResolverRole role, int item) +{ + const IconRegistryEntry *entry = icon_registry_find (role, item); + + if (!entry) + return NULL; + + return entry->system_icon_name; +} + IconResolverThemeVariant icon_resolver_detect_theme_variant (void) { diff --git a/src/fe-gtk/icon-resolver.h b/src/fe-gtk/icon-resolver.h index 0f4a5c8a..fa486b30 100644 --- a/src/fe-gtk/icon-resolver.h +++ b/src/fe-gtk/icon-resolver.h @@ -80,6 +80,7 @@ const char *icon_resolver_icon_name_from_stock (const char *stock_name); const char *icon_resolver_icon_name_for_menu_custom (const char *custom_icon_name); gboolean icon_resolver_menu_action_from_custom (const char *custom_icon_name, int *action_out); gboolean icon_resolver_menu_action_from_name (const char *name, int *action_out); +const char *icon_resolver_system_icon_name (IconResolverRole role, int item); IconResolverThemeVariant icon_resolver_detect_theme_variant (void); char *icon_resolver_resolve_path (IconResolverRole role, int item, GtkIconSize size, const char *context, IconResolverThemeVariant variant,