summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2005-11-12 06:59:49 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2005-11-12 06:59:49 +0000
commit82f12b610d4087d30f0f2ca45bbf1f276abe6930 (patch)
tree3f7ee7dd8788931aa3fd096203972826f28b0476
parentde283259596799d76405e0b90facc17bd5a9850b (diff)
downloadgdk-pixbuf-82f12b610d4087d30f0f2ca45bbf1f276abe6930.tar.gz
Make builtin icons work in gtk_window_set_icon_name() (#321046, Maxim
2005-11-12 Matthias Clasen <mclasen@redhat.com> Make builtin icons work in gtk_window_set_icon_name() (#321046, Maxim Udushlivy) * gtk/gtkicontheme.c (insert_theme): Always insert the default theme. (ensure_valid_themes): Call _gtk_icon_theme_ensure_builtin_cache() from here. (theme_lookup_icon, find_builtin_icon): ...and not from here. (gtk_icon_theme_lookup_icon): Remove an unncessary assert. (gtk_icon_theme_get_icon_sizes): Also check builtin icons.
-rw-r--r--ChangeLog13
-rw-r--r--ChangeLog.pre-2-1013
-rw-r--r--gtk/gtkicontheme.c146
3 files changed, 101 insertions, 71 deletions
diff --git a/ChangeLog b/ChangeLog
index 109808224..6e6e623f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-11-12 Matthias Clasen <mclasen@redhat.com>
+
+ Make builtin icons work in gtk_window_set_icon_name()
+ (#321046, Maxim Udushlivy)
+
+ * gtk/gtkicontheme.c (insert_theme): Always insert the default
+ theme.
+ (ensure_valid_themes): Call _gtk_icon_theme_ensure_builtin_cache()
+ from here.
+ (theme_lookup_icon, find_builtin_icon): ...and not from here.
+ (gtk_icon_theme_lookup_icon): Remove an unncessary assert.
+ (gtk_icon_theme_get_icon_sizes): Also check builtin icons.
+
2005-11-12 Tor Lillqvist <tml@novell.com>
* gtk/gtkfilesystemwin32.c (filename_get_info): Don't hide
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 109808224..6e6e623f9 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,16 @@
+2005-11-12 Matthias Clasen <mclasen@redhat.com>
+
+ Make builtin icons work in gtk_window_set_icon_name()
+ (#321046, Maxim Udushlivy)
+
+ * gtk/gtkicontheme.c (insert_theme): Always insert the default
+ theme.
+ (ensure_valid_themes): Call _gtk_icon_theme_ensure_builtin_cache()
+ from here.
+ (theme_lookup_icon, find_builtin_icon): ...and not from here.
+ (gtk_icon_theme_lookup_icon): Remove an unncessary assert.
+ (gtk_icon_theme_get_icon_sizes): Also check builtin icons.
+
2005-11-12 Tor Lillqvist <tml@novell.com>
* gtk/gtkfilesystemwin32.c (filename_get_info): Don't hide
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 3b439cc87..bfce17070 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -937,31 +937,25 @@ insert_theme (GtkIconTheme *icon_theme, const char *theme_name)
g_free (path);
}
+ if (theme_file || strcmp (theme_name, DEFAULT_THEME_NAME) == 0)
+ {
+ theme = g_new0 (IconTheme, 1);
+ theme->name = g_strdup (theme_name);
+ priv->themes = g_list_prepend (priv->themes, theme);
+ }
+
if (theme_file == NULL)
return;
-
- theme = g_new (IconTheme, 1);
+
theme->display_name =
g_key_file_get_locale_string (theme_file, "Icon Theme", "Name", NULL, NULL);
if (!theme->display_name)
- {
- g_warning ("Theme file for %s has no name\n", theme_name);
- g_free (theme);
- g_key_file_free (theme_file);
- return;
- }
+ g_warning ("Theme file for %s has no name\n", theme_name);
dirs = g_key_file_get_string_list (theme_file, "Icon Theme", "Directories", NULL, NULL);
if (!dirs)
- {
- g_warning ("Theme file for %s has no directories\n", theme_name);
- g_free (theme->display_name);
- g_free (theme);
- g_key_file_free (theme_file);
- return;
- }
+ g_warning ("Theme file for %s has no directories\n", theme_name);
- theme->name = g_strdup (theme_name);
theme->comment =
g_key_file_get_locale_string (theme_file,
"Icon Theme", "Comment",
@@ -979,9 +973,6 @@ insert_theme (GtkIconTheme *icon_theme, const char *theme_name)
theme->dirs = g_list_reverse (theme->dirs);
- /* Prepend the finished theme */
- priv->themes = g_list_prepend (priv->themes, theme);
-
themes = g_key_file_get_string_list (theme_file,
"Icon Theme",
"Inherits",
@@ -1129,11 +1120,47 @@ load_themes (GtkIconTheme *icon_theme)
}
static void
+_gtk_icon_theme_ensure_builtin_cache (void)
+{
+ static gboolean initialized = FALSE;
+ IconThemeDir *dir;
+ gint sizes[5] = { 16, 20, 24, 32, 48 };
+ gint n_sizes = G_N_ELEMENTS (sizes);
+ gint i;
+
+ if (!initialized)
+ {
+ initialized = TRUE;
+
+ _builtin_cache = _gtk_icon_cache_new ((gchar *)builtin_icons);
+
+ for (i = 0; i < n_sizes; i++)
+ {
+ dir = g_new (IconThemeDir, 1);
+ dir->type = ICON_THEME_DIR_THRESHOLD;
+ dir->context = 0;
+ dir->size = sizes[i];
+ dir->min_size = sizes[i];
+ dir->max_size = sizes[i];
+ dir->threshold = 2;
+ dir->dir = NULL;
+ dir->icon_data = NULL;
+ dir->subdir = g_strdup_printf ("%d", sizes[i]);
+ dir->cache = _gtk_icon_cache_ref (_builtin_cache);
+
+ builtin_dirs = g_list_append (builtin_dirs, dir);
+ }
+ }
+}
+
+static void
ensure_valid_themes (GtkIconTheme *icon_theme)
{
GtkIconThemePrivate *priv = icon_theme->priv;
GTimeVal tv;
+ _gtk_icon_theme_ensure_builtin_cache ();
+
if (priv->themes_valid)
{
g_get_current_time (&tv);
@@ -1196,7 +1223,6 @@ gtk_icon_theme_lookup_icon (GtkIconTheme *icon_theme,
UnthemedIcon *unthemed_icon;
gboolean allow_svg;
gboolean use_builtin;
- gboolean found_default;
g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
g_return_val_if_fail (icon_name != NULL, NULL);
@@ -1218,24 +1244,15 @@ gtk_icon_theme_lookup_icon (GtkIconTheme *icon_theme,
ensure_valid_themes (icon_theme);
- found_default = FALSE;
- l = priv->themes;
- while (l != NULL)
+ for (l = priv->themes; l; l = l->next)
{
IconTheme *theme = l->data;
- if (strcmp (theme->name, DEFAULT_THEME_NAME) == 0)
- found_default = TRUE;
-
icon_info = theme_lookup_icon (theme, icon_name, size, allow_svg, use_builtin);
if (icon_info)
goto out;
-
- l = l->next;
}
- g_assert (found_default);
-
unthemed_icon = g_hash_table_lookup (priv->unthemed_icons, icon_name);
if (unthemed_icon)
{
@@ -1450,11 +1467,10 @@ gint *
gtk_icon_theme_get_icon_sizes (GtkIconTheme *icon_theme,
const char *icon_name)
{
- GList *l, *d;
+ GList *l, *d, *icons;
GHashTable *sizes;
gint *result, *r;
- guint suffix;
-
+ guint suffix;
GtkIconThemePrivate *priv;
g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
@@ -1483,6 +1499,32 @@ gtk_icon_theme_get_icon_sizes (GtkIconTheme *icon_theme,
}
}
+ for (d = builtin_dirs; d; d = d->next)
+ {
+ IconThemeDir *dir = d->data;
+
+ suffix = theme_dir_get_icon_suffix (dir, icon_name, NULL);
+ if (suffix != ICON_SUFFIX_NONE)
+ {
+ if (suffix == ICON_SUFFIX_SVG)
+ g_hash_table_insert (sizes, GINT_TO_POINTER (-1), NULL);
+ else
+ g_hash_table_insert (sizes, GINT_TO_POINTER (dir->size), NULL);
+ }
+ }
+
+ if (icon_theme_builtin_icons)
+ {
+ icons = g_hash_table_lookup (icon_theme_builtin_icons, icon_name);
+
+ for ( ; icons; icons = icons->next);
+ {
+ BuiltinIcon *icon = icons->data;
+
+ g_hash_table_insert (sizes, GINT_TO_POINTER (icon->size), NULL);
+ }
+ }
+
r = result = g_new0 (gint, g_hash_table_size (sizes) + 1);
g_hash_table_foreach (sizes, add_size, &r);
@@ -1811,40 +1853,6 @@ theme_dir_get_icon_suffix (IconThemeDir *dir,
return suffix;
}
-static void
-_gtk_icon_theme_ensure_builtin_cache (void)
-{
- static gboolean initialized = FALSE;
- IconThemeDir *dir;
- gint sizes[5] = { 16, 20, 24, 32, 48 };
- gint n_sizes = G_N_ELEMENTS (sizes);
- gint i;
-
- if (!initialized)
- {
- initialized = TRUE;
-
- _builtin_cache = _gtk_icon_cache_new ((gchar *)builtin_icons);
-
- for (i = 0; i < n_sizes; i++)
- {
- dir = g_new (IconThemeDir, 1);
- dir->type = ICON_THEME_DIR_THRESHOLD;
- dir->context = 0;
- dir->size = sizes[i];
- dir->min_size = sizes[i];
- dir->max_size = sizes[i];
- dir->threshold = 2;
- dir->dir = NULL;
- dir->icon_data = NULL;
- dir->subdir = g_strdup_printf ("%d", sizes[i]);
- dir->cache = _gtk_icon_cache_ref (_builtin_cache);
-
- builtin_dirs = g_list_append (builtin_dirs, dir);
- }
- }
-}
-
static GtkIconInfo *
theme_lookup_icon (IconTheme *theme,
const char *icon_name,
@@ -1867,8 +1875,6 @@ theme_lookup_icon (IconTheme *theme,
/* Builtin icons are logically part of the default theme and
* are searched before other subdirectories of the default theme.
*/
- _gtk_icon_theme_ensure_builtin_cache ();
-
if (strcmp (theme->name, DEFAULT_THEME_NAME) == 0 && use_builtin)
{
closest_builtin = find_builtin_icon (icon_name,
@@ -2945,8 +2951,6 @@ find_builtin_icon (const gchar *icon_name,
gboolean has_larger = FALSE;
BuiltinIcon *min_icon = NULL;
- _gtk_icon_factory_ensure_default_icons ();
-
if (!icon_theme_builtin_icons)
return NULL;