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

Reply via email to