Revision: 1244
http://geeqie.svn.sourceforge.net/geeqie/?rev=1244&view=rev
Author: zas_
Date: 2008-11-15 20:17:14 +0000 (Sat, 15 Nov 2008)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/src/cache.c
trunk/src/main.h
trunk/src/ui_fileops.c
trunk/src/ui_fileops.h
Modified: trunk/src/cache.c
===================================================================
--- trunk/src/cache.c 2008-11-15 20:01:25 UTC (rev 1243)
+++ trunk/src/cache.c 2008-11-15 20:17:14 UTC (rev 1244)
@@ -767,7 +767,15 @@
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;
}
@@ -777,7 +785,15 @@
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;
}
Modified: trunk/src/main.h
===================================================================
--- trunk/src/main.h 2008-11-15 20:01:25 UTC (rev 1243)
+++ trunk/src/main.h 2008-11-15 20:17:14 UTC (rev 1244)
@@ -64,6 +64,8 @@
*----------------------------------------------------------------------------
*/
+#define USE_XDG 0
+
#define GQ_APPNAME "Geeqie"
#define GQ_APPNAME_LC "geeqie"
#define GQ_WEBSITE "geeqie.sourceforge.net"
Modified: trunk/src/ui_fileops.c
===================================================================
--- trunk/src/ui_fileops.c 2008-11-15 20:01:25 UTC (rev 1243)
+++ trunk/src/ui_fileops.c 2008-11-15 20:17:14 UTC (rev 1244)
@@ -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;
}
Modified: trunk/src/ui_fileops.h
===================================================================
--- trunk/src/ui_fileops.h 2008-11-15 20:01:25 UTC (rev 1243)
+++ trunk/src/ui_fileops.h 2008-11-15 20:17:14 UTC (rev 1244)
@@ -34,6 +34,9 @@
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);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn