Mercurial > geeqie.yaz
diff src/ui_fileops.c @ 1149:c4fcf8001574
Implement preliminary support for XDG Base Directory Specification.
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.
author | zas_ |
---|---|
date | Sat, 15 Nov 2008 20:17:14 +0000 |
parents | 95860439070b |
children | 3692efcbd325 |
line wrap: on
line diff
--- a/src/ui_fileops.c Sat Nov 15 20:01:25 2008 +0000 +++ b/src/ui_fileops.c Sat Nov 15 20:17:14 2008 +0000 @@ -186,14 +186,66 @@ 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; } @@ -203,8 +255,15 @@ 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; } @@ -213,9 +272,16 @@ static gchar *trash_dir = NULL; if (trash_dir) return trash_dir; + + 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); + } - trash_dir = g_build_filename(get_rc_dir(), GQ_TRASH_DIR, NULL); - return trash_dir; }