icons: add system_icon_name API, make gtkutil fall back via resolver registry

This commit is contained in:
2026-03-01 10:14:41 -07:00
parent e63e68dfde
commit 5983befd5b
3 changed files with 20 additions and 7 deletions

View File

@@ -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 *

View File

@@ -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)
{

View File

@@ -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,