GtkIconTheme: Stop using the all_icons hash table

This hash table was used in gtk_icon_theme_has_icon; we can
implement that function just as well without it and save some
memory.
This commit is contained in:
Matthias Clasen 2014-06-19 21:37:01 -04:00
parent a8939e7cff
commit 11ec8f7285

View File

@ -334,6 +334,8 @@ static GtkIconInfo *theme_lookup_icon (IconTheme *theme,
static void theme_list_icons (IconTheme *theme,
GHashTable *icons,
GQuark context);
static gboolean theme_has_icon (IconTheme *theme,
const gchar *icon_name);
static void theme_list_contexts (IconTheme *theme,
GHashTable *contexts);
static void theme_subdir_load (GtkIconTheme *icon_theme,
@ -2326,9 +2328,11 @@ gtk_icon_theme_has_icon (GtkIconTheme *icon_theme,
return TRUE;
}
if (g_hash_table_lookup_extended (priv->all_icons,
icon_name, NULL, NULL))
return TRUE;
for (l = priv->themes; l; l = l->next)
{
if (theme_has_icon (l->data, icon_name))
return TRUE;
}
if (icon_theme_builtin_icons &&
g_hash_table_lookup_extended (icon_theme_builtin_icons,
@ -2990,6 +2994,31 @@ theme_list_icons (IconTheme *theme,
}
}
static gboolean
theme_has_icon (IconTheme *theme,
const gchar *icon_name)
{
GList *l;
for (l = theme->dirs; l; l = l->next)
{
IconThemeDir *dir = l->data;
if (dir->cache)
{
if (_gtk_icon_cache_has_icon (dir->cache, icon_name))
return TRUE;
}
else
{
if (g_hash_table_lookup (dir->icons, icon_name) != NULL)
return TRUE;
}
}
return FALSE;
}
static void
theme_list_contexts (IconTheme *theme,
GHashTable *contexts)