Skip to content

Commit

Permalink
Implement preliminary support for XDG Base Directory Specification.
Browse files Browse the repository at this point in the history
See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html.

This feature was requested for a long time (feature requests #1950978 and #2289481).
For now, it is disabled since it breaks compatibility with previous versions.
To be able to test it, you have to enable it by defining USE_XDG to 1 in main.h.

geeqierc and other conf files are going to:
$XDG_CONFIG_HOME/geeqie/ (default to $HOME/.config/geeqie/).

metadata and thumbnails cache (if std is not used) are going to:
$XDG_CACHE_HOME/geeqie/metadata/ (default to $HOME/.cache/geeqie/metadata/)
and $XDG_CACHE_HOME/geeqie/thumbnails/ (default to $HOME/.cache/geeqie/thumbnails/)

collections are going to:
$XDG_DATA_HOME/geeqie/collections/ (default to $HOME/.local/share/geeqie/collections/)


Please test and report any issue.
  • Loading branch information
Laurent Monin committed Nov 15, 2008
1 parent 6419843 commit 19e0420
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 8 deletions.
20 changes: 18 additions & 2 deletions src/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -767,7 +767,15 @@ const gchar *get_thumbnails_cache_dir(void)

if (thumbnails_cache_dir) return thumbnails_cache_dir;

thumbnails_cache_dir = g_build_filename(get_rc_dir(), GQ_CACHE_THUMB, NULL);
if (USE_XDG)
{
thumbnails_cache_dir = g_build_filename(xdg_cache_home_get(), GQ_APPNAME_LC, GQ_CACHE_THUMB, NULL);
}
else
{
thumbnails_cache_dir = g_build_filename(get_rc_dir(), GQ_CACHE_THUMB, NULL);
}

return thumbnails_cache_dir;
}

Expand All @@ -777,7 +785,15 @@ const gchar *get_metadata_cache_dir(void)

if (metadata_cache_dir) return metadata_cache_dir;

metadata_cache_dir = g_build_filename(get_rc_dir(), GQ_CACHE_METADATA, NULL);
if (USE_XDG)
{
metadata_cache_dir = g_build_filename(xdg_cache_home_get(), GQ_APPNAME_LC, GQ_CACHE_METADATA, NULL);
}
else
{
metadata_cache_dir = g_build_filename(get_rc_dir(), GQ_CACHE_METADATA, NULL);
}

return metadata_cache_dir;
}

Expand Down
2 changes: 2 additions & 0 deletions src/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@
*----------------------------------------------------------------------------
*/

#define USE_XDG 0

#define GQ_APPNAME "Geeqie"
#define GQ_APPNAME_LC "geeqie"
#define GQ_WEBSITE "geeqie.sourceforge.net"
Expand Down
78 changes: 72 additions & 6 deletions src/ui_fileops.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,14 +186,66 @@ const gchar *homedir(void)
return home;
}

static gchar *xdg_dir_get(const gchar *key, const gchar *fallback)
{
gchar *dir = getenv(key);

if (!dir || dir[0] == '\0')
{
return g_build_filename(homedir(), fallback, NULL);
}

return path_to_utf8(dir);
}

const gchar *xdg_data_home_get(void)
{
static const gchar *xdg_data_home = NULL;

if (xdg_data_home) return xdg_data_home;

xdg_data_home = xdg_dir_get("XDG_DATA_HOME", ".local/share");

return xdg_data_home;
}

const gchar *xdg_config_home_get(void)
{
static const gchar *xdg_config_home = NULL;

if (xdg_config_home) return xdg_config_home;

xdg_config_home = xdg_dir_get("XDG_CONFIG_HOME", ".config");

return xdg_config_home;
}

const gchar *xdg_cache_home_get(void)
{
static const gchar *xdg_cache_home = NULL;

if (xdg_cache_home) return xdg_cache_home;

xdg_cache_home = xdg_dir_get("XDG_CACHE_HOME", ".cache");

return xdg_cache_home;
}

const gchar *get_rc_dir(void)
{
static gchar *rc_dir = NULL;

if (rc_dir) return rc_dir;

rc_dir = g_build_filename(homedir(), GQ_RC_DIR, NULL);

if (USE_XDG)
{
rc_dir = g_build_filename(xdg_config_home_get(), GQ_APPNAME_LC, NULL);
}
else
{
rc_dir = g_build_filename(homedir(), GQ_RC_DIR, NULL);
}

return rc_dir;
}

Expand All @@ -203,8 +255,15 @@ const gchar *get_collections_dir(void)

if (collections_dir) return collections_dir;

collections_dir = g_build_filename(get_rc_dir(), GQ_COLLECTIONS_DIR, NULL);

if (USE_XDG)
{
collections_dir = g_build_filename(xdg_data_home_get(), GQ_APPNAME_LC, GQ_COLLECTIONS_DIR, NULL);
}
else
{
collections_dir = g_build_filename(get_rc_dir(), GQ_COLLECTIONS_DIR, NULL);
}

return collections_dir;
}

Expand All @@ -213,9 +272,16 @@ const gchar *get_trash_dir(void)
static gchar *trash_dir = NULL;

if (trash_dir) return trash_dir;

trash_dir = g_build_filename(get_rc_dir(), GQ_TRASH_DIR, NULL);

if (USE_XDG)
{
trash_dir = g_build_filename(xdg_data_home_get(), GQ_APPNAME_LC, GQ_TRASH_DIR, NULL);
}
else
{
trash_dir = g_build_filename(get_rc_dir(), GQ_TRASH_DIR, NULL);
}

return trash_dir;
}

Expand Down
3 changes: 3 additions & 0 deletions src/ui_fileops.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ void print_term(const gchar *text_utf8);
gchar *path_to_utf8(const gchar *path);
gchar *path_from_utf8(const gchar *path);

const gchar *xdg_data_home_get(void);
const gchar *xdg_config_home_get(void);
const gchar *xdg_cache_home_get(void);
const gchar *homedir(void);
const gchar *get_rc_dir(void);
const gchar *get_collections_dir(void);
Expand Down

0 comments on commit 19e0420

Please sign in to comment.