rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=54df868a052113abc9eb7db34133dcd924b3fff4

commit 54df868a052113abc9eb7db34133dcd924b3fff4
Author: Vyacheslav Reutskiy <[email protected]>
Date:   Fri May 27 09:45:18 2016 +0300

    config: get the config dir in runtime
    
    Fixes T3692
    @fix
    
    Change-Id: Idfdce7450156a6eab1f9e4bd4c4e3d35b745549e
---
 configure.ac            |  1 -
 src/bin/config/config.c | 80 ++++++++++++++++++++++++++++++++++++++++++-------
 src/bin/config/config.h | 11 +++++++
 src/bin/eflete.c        |  7 +++--
 4 files changed, 85 insertions(+), 14 deletions(-)

diff --git a/configure.ac b/configure.ac
index 3fb4347..cf9cf3a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -211,7 +211,6 @@ EFLETE_DEFINE+=" 
-DEFLETE_TEMPLATE_EDJ_PATH=\\\"${datadir}/eflete/themes/default
 EFLETE_DEFINE+=" 
-DEFLETE_TEMPLATE_EDC_PATH=\\\"${datadir}/eflete/themes/default/template/edc\\\"
 "
 EFLETE_DEFINE+=" 
-DEFLETE_TEMPLATE_IMAGES_PATH=\\\"${datadir}/eflete/themes/default/template/images\\\"
 "
 EFLETE_DEFINE+=" 
-DEFLETE_TEMPLATE_SOUNDS_PATH=\\\"${datadir}/eflete/themes/default/template/sounds\\\"
 "
-EFLETE_DEFINE+=" -DEFLETE_SETT_PATH=\\\"${HOME}/.config/eflete/\\\" "
 AC_SUBST([EFLETE_DEFINE])
 
 AM_PROG_CC_C_O
diff --git a/src/bin/config/config.c b/src/bin/config/config.c
index 53e4645..0c11080 100644
--- a/src/bin/config/config.c
+++ b/src/bin/config/config.c
@@ -21,8 +21,7 @@
 #include "shortcuts.h"
 #include "enventor_module.h"
 
-#define CONFIG_FILE        EFLETE_SETT_PATH"eflete.cfg"
-#define CONFIG_FILE_TMP    CONFIG_FILE".tmp"
+#define CONFIG_FILE        "eflete.cfg"
 #define CONFIG_FILE_KEY    "config"
 
 #define PROFILE_FILE_EXT   ".prf"
@@ -38,6 +37,57 @@ static Eet_Data_Descriptor *edd_profile = NULL;
 static Eet_Data_Descriptor *edd_keys = NULL;
 static Eet_Data_Descriptor *edd_color = NULL;
 
+Eina_Stringshare *
+config_dir_get(void)
+{
+   const char *conf_path = NULL;
+   Eina_Stringshare *cfg;
+
+   conf_path = getenv("XDG_CONFIG_HOME");
+   if (conf_path)
+     cfg = eina_stringshare_printf("%s/eflete", conf_path);
+   else
+     {
+        conf_path = eina_environment_home_get();
+        cfg = eina_stringshare_printf("%s/.config/eflete", conf_path);
+     }
+   return cfg;
+}
+
+static Eina_Stringshare *
+_config_file_path_get(void)
+{
+   Eina_Stringshare *cfg, *conf_path;
+
+   conf_path = config_dir_get();
+   cfg = eina_stringshare_printf("%s/"CONFIG_FILE, conf_path);
+
+   eina_stringshare_del(conf_path);
+   return cfg;
+}
+
+static Eina_Stringshare *
+_config_tmp_file_path_get(const char *file)
+{
+   assert (file != NULL);
+
+   return eina_stringshare_printf("%s.tmp", file);
+}
+
+static Eina_Stringshare *
+_profile_path_get(const char *name)
+{
+   Eina_Stringshare *prf, *conf_path;
+
+   assert (name != NULL);
+
+   conf_path = config_dir_get();
+   prf = eina_stringshare_printf("%s/%s"PROFILE_FILE_EXT, conf_path, name);
+
+   eina_stringshare_del(conf_path);
+   return prf;
+}
+
 static void
 _config_free(void)
 {
@@ -383,10 +433,11 @@ void
 config_load(void)
 {
    Eet_File *ef;
-
+   Eina_Stringshare *config_file;
 
    if (config) _config_free();
-   ef = eet_open(CONFIG_FILE, EET_FILE_MODE_READ);
+   config_file = _config_file_path_get();
+   ef = eet_open(config_file, EET_FILE_MODE_READ);
    if (ef)
      {
         config = eet_data_read(ef, edd_base, CONFIG_FILE_KEY);
@@ -404,6 +455,7 @@ config_load(void)
 #ifdef HAVE_ENVENTOR
    enventor_object_profile_load(ap.enventor, profile_get());
 #endif /* HAVE_ENVENTOR */
+   eina_stringshare_del(config_file);
 }
 
 Eina_Bool
@@ -429,7 +481,7 @@ config_save(void)
    int x, y, w, h;
    Eet_File *ef;
    Eina_Bool ok;
-
+   Eina_Stringshare *cfg, *tmp; 
 
    if (!edd_base)
      {
@@ -449,14 +501,18 @@ config_save(void)
      config_panes_sizes_data_update();
 
    profile_save(config->profile);
+   cfg = _config_file_path_get();
+   tmp = _config_tmp_file_path_get(cfg);
 
-   ef = eet_open(CONFIG_FILE_TMP, EET_FILE_MODE_WRITE);
+   ef = eet_open(tmp, EET_FILE_MODE_WRITE);
    if (!ef) return false;
    ok = eet_data_write(ef, edd_base, CONFIG_FILE_KEY, config, 1);
    eet_close(ef);
    if (!ok) return false;
-   ecore_file_mv(CONFIG_FILE_TMP, CONFIG_FILE);
+   ecore_file_mv(tmp, cfg);
 
+   eina_stringshare_del(tmp);
+   eina_stringshare_del(cfg);
    return true;
 }
 
@@ -474,7 +530,7 @@ profile_load(const char *name)
 
    assert(name != NULL);
 
-   path = eina_stringshare_printf(EFLETE_SETT_PATH"%s"PROFILE_FILE_EXT, name);
+   path = _profile_path_get(name);
 
    if (profile) _profile_free();
    ef = eet_open(path, EET_FILE_MODE_READ);
@@ -507,7 +563,7 @@ profile_save(const char *name)
         return false;
      }
 
-   path = eina_stringshare_printf(EFLETE_SETT_PATH"%s"PROFILE_FILE_EXT, name);
+   path = _profile_path_get(name); 
    tmp = eina_stringshare_printf("%s%s", path, ".tmp");
 
    ef = eet_open(tmp, EET_FILE_MODE_WRITE);
@@ -535,9 +591,10 @@ profiles_get(void)
    Eina_List *files;
    char *f;
    char tmp[BUFF_MAX];
-   Eina_Stringshare *p;
+   Eina_Stringshare *p, *conf_path;
 
-   files = ecore_file_ls(EFLETE_SETT_PATH);
+   conf_path = config_dir_get();
+   files = ecore_file_ls(conf_path);
    EINA_LIST_FREE(files, f)
      {
         if (eina_str_has_suffix(f, PROFILE_FILE_EXT))
@@ -551,5 +608,6 @@ profiles_get(void)
         free(f);
      }
 
+   eina_stringshare_del(conf_path);
    return profiles;
 }
diff --git a/src/bin/config/config.h b/src/bin/config/config.h
index 89d8e87..14952ed 100644
--- a/src/bin/config/config.h
+++ b/src/bin/config/config.h
@@ -313,4 +313,15 @@ profile_get(void);
 Eina_List *
 profiles_get(void);
 
+/**
+ * Get the path to Eflete config dir
+ *
+ * @return The eina_stringshare with path to config dir
+ *
+ * @ingroup Config
+ */
+Eina_Stringshare *
+config_dir_get(void);
+
+
 #endif /* CONFIG_H */
diff --git a/src/bin/eflete.c b/src/bin/eflete.c
index 4aa870f..3dfae53 100644
--- a/src/bin/eflete.c
+++ b/src/bin/eflete.c
@@ -45,6 +45,7 @@ eflete_main_loop_quit(void)
 Eina_Bool
 app_init()
 {
+   Eina_Stringshare *conf_path;
 #ifdef ENABLE_NLS
    setlocale(LC_ALL, "");
    bindtextdomain(PACKAGE, LOCALE_DIR);
@@ -81,8 +82,9 @@ app_init()
         return false;
      }
 
-   if (!ecore_file_exists(EFLETE_SETT_PATH))
-     ecore_file_mkdir(EFLETE_SETT_PATH);
+   conf_path = config_dir_get();
+   if (!ecore_file_exists(conf_path))
+     ecore_file_mkdir(conf_path);
 
    if (!config_init()) return false;
 
@@ -105,6 +107,7 @@ app_init()
 
    ap.last_path = NULL;
 
+   eina_stringshare_del(conf_path);
    return true;
 }
 

-- 


Reply via email to