summaryrefslogtreecommitdiffstats
path: root/x11-toolkits/gtk20/files/patch-gtk_gtkiconcache.c
diff options
context:
space:
mode:
Diffstat (limited to 'x11-toolkits/gtk20/files/patch-gtk_gtkiconcache.c')
-rw-r--r--x11-toolkits/gtk20/files/patch-gtk_gtkiconcache.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/x11-toolkits/gtk20/files/patch-gtk_gtkiconcache.c b/x11-toolkits/gtk20/files/patch-gtk_gtkiconcache.c
new file mode 100644
index 000000000..f875c2e79
--- /dev/null
+++ b/x11-toolkits/gtk20/files/patch-gtk_gtkiconcache.c
@@ -0,0 +1,49 @@
+--- gtk/gtkiconcache.c.orig Mon Aug 29 07:05:13 2005
++++ gtk/gtkiconcache.c Sat Nov 19 19:14:10 2005
+@@ -75,6 +75,37 @@
+ }
+ }
+
++static gboolean
++is_uptodate (const char *dirname, time_t cache_mtime)
++{
++ GDir *dir;
++ const char *filename;
++ gboolean uptodate = TRUE;
++
++ dir = g_dir_open (dirname, 0, NULL);
++ if (! dir)
++ return TRUE;
++
++ while (uptodate && (filename = g_dir_read_name (dir)))
++ if (filename[0] != '.')
++ {
++ char *pathname;
++ struct stat st;
++
++ pathname = g_build_filename (dirname, filename, NULL);
++ if (g_stat (pathname, &st) >= 0
++ && (cache_mtime < st.st_mtime
++ || (S_ISDIR (st.st_mode)
++ && ! is_uptodate (pathname, cache_mtime))))
++ uptodate = FALSE;
++ g_free(pathname);
++ }
++
++ g_dir_close(dir);
++
++ return uptodate;
++}
++
+ GtkIconCache *
+ _gtk_icon_cache_new_for_path (const gchar *path)
+ {
+@@ -106,7 +137,7 @@
+ goto done;
+
+ /* Verify cache is uptodate */
+- if (st.st_mtime < path_st.st_mtime)
++ if (st.st_mtime < path_st.st_mtime || ! is_uptodate(path, st.st_mtime))
+ {
+ GTK_NOTE (ICONTHEME,
+ g_print ("cache outdated\n"));