Implement for cached themes.
2004-10-21 Matthias Clasen <mclasen@redhat.com> * gtk/gtkicontheme.c (gtk_icon_theme_has_icon): Implement for cached themes. * gtk/gtkiconcache.h: * gtk/gtkiconcache.c (_gtk_icon_cache_has_icon): New function. * gtk/updateiconcache.c (scan_directory): Don't skip .icon files which are listed before their images. (foreach_remove_func): Instead filter lonely .icon files out here. * gtk/gtkicontheme.c (theme_dir_get_icon_suffix): Filter out the HAS_ICON_FILE flag.
This commit is contained in:
committed by
Matthias Clasen
parent
81c28db09d
commit
a34d841d79
@ -1322,6 +1322,27 @@ gtk_icon_theme_load_icon (GtkIconTheme *icon_theme,
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const gchar *icon_name;
|
||||
gboolean found;
|
||||
} CacheSearch;
|
||||
|
||||
static void
|
||||
cache_has_icon (gpointer key,
|
||||
gpointer value,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkIconCache *cache = (GtkIconCache *)value;
|
||||
CacheSearch *search = (CacheSearch *)user_data;
|
||||
|
||||
if (!cache || search->found)
|
||||
return;
|
||||
|
||||
if (_gtk_icon_cache_has_icon (cache, search->icon_name))
|
||||
search->found = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_icon_theme_has_icon:
|
||||
* @icon_theme: a #GtkIconTheme
|
||||
@ -1340,6 +1361,8 @@ gtk_icon_theme_has_icon (GtkIconTheme *icon_theme,
|
||||
const char *icon_name)
|
||||
{
|
||||
GtkIconThemePrivate *priv;
|
||||
GList *l;
|
||||
CacheSearch search;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), FALSE);
|
||||
|
||||
@ -1347,6 +1370,27 @@ gtk_icon_theme_has_icon (GtkIconTheme *icon_theme,
|
||||
|
||||
ensure_valid_themes (icon_theme);
|
||||
|
||||
search.icon_name = icon_name;
|
||||
search.found = FALSE;
|
||||
|
||||
for (l = priv->themes; l; l = l->next)
|
||||
{
|
||||
IconTheme *theme = (IconTheme *)l->data;
|
||||
|
||||
g_hash_table_foreach (theme->icon_caches, cache_has_icon, &search);
|
||||
|
||||
if (search.found)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (l = priv->unthemed_icons_caches; l; l = l->next)
|
||||
{
|
||||
GtkIconCache *cache = (GtkIconCache *)l->data;
|
||||
|
||||
if (_gtk_icon_cache_has_icon (cache, icon_name))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (g_hash_table_lookup_extended (priv->all_icons,
|
||||
icon_name, NULL, NULL))
|
||||
return TRUE;
|
||||
@ -1741,9 +1785,9 @@ theme_dir_get_icon_suffix (IconThemeDir *dir,
|
||||
dir->subdir);
|
||||
|
||||
if (has_icon_file)
|
||||
{
|
||||
*has_icon_file = suffix & HAS_ICON_FILE;
|
||||
}
|
||||
*has_icon_file = suffix & HAS_ICON_FILE;
|
||||
|
||||
suffix = suffix & ~HAS_ICON_FILE;
|
||||
}
|
||||
else
|
||||
suffix = GPOINTER_TO_UINT (g_hash_table_lookup (dir->icons, icon_name));
|
||||
|
||||
Reference in New Issue
Block a user