[gtk+] icontheme: allow directories with mtime 0
- From: Daniel Drake <dsd src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] icontheme: allow directories with mtime 0
- Date: Mon, 23 Feb 2015 21:10:06 +0000 (UTC)
commit aba2de34436035513b11faa2da4c7c56cc38ede9
Author: Daniel Drake <drake endlessm com>
Date: Mon Feb 23 14:49:08 2015 -0600
icontheme: allow directories with mtime 0
In order to provide a constant mtime between OS build and deploy time,
while also maintaining a hardlink content-addressed model independent of
timestamps, ostree sets all mtimes to 0.
The icon cache code currently ignores directories with mtime 0, assuming
they don't exist.
Track directory existence in a more precise way.
https://bugzilla.gnome.org/show_bug.cgi?id=745052
gtk/gtkicontheme.c | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 7e2f8ed..f47a956 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -315,8 +315,9 @@ typedef struct
typedef struct
{
gchar *dir;
- time_t mtime; /* 0 == not existing or not a dir */
+ time_t mtime;
GtkIconCache *cache;
+ gboolean exists;
} IconThemeDirMtime;
static void gtk_icon_theme_finalize (GObject *object);
@@ -1133,10 +1134,13 @@ insert_theme (GtkIconTheme *icon_theme,
dir_mtime = g_slice_new (IconThemeDirMtime);
dir_mtime->cache = NULL;
dir_mtime->dir = path;
- if (g_stat (path, &stat_buf) == 0 && S_ISDIR (stat_buf.st_mode))
+ if (g_stat (path, &stat_buf) == 0 && S_ISDIR (stat_buf.st_mode)) {
dir_mtime->mtime = stat_buf.st_mtime;
- else
+ dir_mtime->exists = TRUE;
+ } else {
dir_mtime->mtime = 0;
+ dir_mtime->exists = FALSE;
+ }
priv->dir_mtimes = g_list_prepend (priv->dir_mtimes, dir_mtime);
}
@@ -1370,11 +1374,13 @@ load_themes (GtkIconTheme *icon_theme)
dir_mtime->dir = g_strdup (dir);
dir_mtime->mtime = 0;
+ dir_mtime->exists = FALSE;
dir_mtime->cache = NULL;
if (g_stat (dir, &stat_buf) != 0 || !S_ISDIR (stat_buf.st_mode))
continue;
dir_mtime->mtime = stat_buf.st_mtime;
+ dir_mtime->exists = TRUE;
dir_mtime->cache = _gtk_icon_cache_new_for_path (dir);
if (dir_mtime->cache != NULL)
@@ -2714,12 +2720,12 @@ rescan_themes (GtkIconTheme *icon_theme)
stat_res = g_stat (dir_mtime->dir, &stat_buf);
/* dir mtime didn't change */
- if (stat_res == 0 &&
+ if (stat_res == 0 && dir_mtime->exists &&
S_ISDIR (stat_buf.st_mode) &&
dir_mtime->mtime == stat_buf.st_mtime)
continue;
/* didn't exist before, and still doesn't */
- if (dir_mtime->mtime == 0 &&
+ if (!dir_mtime->exists &&
(stat_res != 0 || !S_ISDIR (stat_buf.st_mode)))
continue;
@@ -3314,7 +3320,7 @@ theme_subdir_load (GtkIconTheme *icon_theme,
{
dir_mtime = (IconThemeDirMtime *)d->data;
- if (dir_mtime->mtime == 0)
+ if (!dir_mtime->exists)
continue; /* directory doesn't exist */
full_dir = g_build_filename (dir_mtime->dir, subdir, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]