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; } --
