summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2015-12-31 15:38:20 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2016-01-05 22:24:58 +0900
commit9f51ad064259a0184fa7eee3db8abedd92e32230 (patch)
tree4e140b96620d8b1474f7afa6e862fb8a238b3548
parentb4f8b8c0c66095730d4436db3987c3fad34aec95 (diff)
downloadelementary-9f51ad064259a0184fa7eee3db8abedd92e32230.tar.gz
elm config - allow the ability to save out to another hidden profile
support the ability to have hidden profiles that begin with a dot (.) char like all hidden files/dirs. to do this we need to also be able to create profiles with a given name (a hidden name) without switching to them, so add the ability to save out to a specific profile name without switching to it. of course this means to list profiles we need to list them or list ALL includiing hidden profiles. @feature
-rw-r--r--src/lib/elm_config.c82
-rw-r--r--src/lib/elm_config.h30
-rw-r--r--src/lib/elm_priv.h4
3 files changed, 80 insertions, 36 deletions
diff --git a/src/lib/elm_config.c b/src/lib/elm_config.c
index 88595dc2b..e15e8fea8 100644
--- a/src/lib/elm_config.c
+++ b/src/lib/elm_config.c
@@ -1053,7 +1053,7 @@ _elm_config_colors_free(const char *palette_name)
}
Eina_List *
-_elm_config_profiles_list(void)
+_elm_config_profiles_list(Eina_Bool hide_profiles)
{
Eina_File_Direct_Info *info;
Eina_List *flist = NULL;
@@ -1065,8 +1065,7 @@ _elm_config_profiles_list(void)
len = _elm_config_user_dir_snprintf(buf, sizeof(buf), "config");
file_it = eina_file_stat_ls(buf);
- if (!file_it)
- goto sys;
+ if (!file_it) goto sys;
buf[len] = '/';
len++;
@@ -1075,15 +1074,15 @@ _elm_config_profiles_list(void)
EINA_ITERATOR_FOREACH(file_it, info)
{
- if (info->name_length >= len)
- continue;
+ if (info->name_length >= len) continue;
+ if ((hide_profiles) && (info->path[info->name_start] == '.')) continue;
if (info->type == EINA_FILE_DIR)
{
flist =
eina_list_sorted_insert(flist, _sort_files_cb,
- eina_stringshare_add(info->path +
- info->name_start));
+ eina_stringshare_add
+ (info->path + info->name_start));
}
}
@@ -1095,8 +1094,7 @@ sys:
sizeof("config") - 1);
file_it = eina_file_stat_ls(buf);
- if (!file_it)
- goto list_free;
+ if (!file_it) goto list_free;
buf[len] = '/';
len++;
@@ -1104,26 +1102,26 @@ sys:
len = sizeof(buf) - len;
EINA_ITERATOR_FOREACH(file_it, info)
{
- if (info->name_length >= len)
- continue;
+ if (info->name_length >= len) continue;
+ if ((hide_profiles) && (info->path[info->name_start] == '.')) continue;
switch (info->type)
{
case EINA_FILE_DIR:
- {
- const Eina_List *l;
- const char *tmp;
-
- EINA_LIST_FOREACH(flist, l, tmp)
- if (!strcmp(info->path + info->name_start, tmp))
- break;
+ {
+ const Eina_List *l;
+ const char *tmp;
- if (!l)
- flist =
- eina_list_sorted_insert(flist, _sort_files_cb,
- eina_stringshare_add(info->path +
- info->name_start));
- }
+ EINA_LIST_FOREACH(flist, l, tmp)
+ {
+ if (!strcmp(info->path + info->name_start, tmp)) break;
+ }
+ if (!l)
+ flist = eina_list_sorted_insert(flist, _sort_files_cb,
+ eina_stringshare_add
+ (info->path +
+ info->name_start));
+ }
break;
default:
@@ -1134,9 +1132,7 @@ sys:
return flist;
list_free:
- EINA_LIST_FREE(flist, dir)
- eina_stringshare_del(dir);
-
+ EINA_LIST_FREE(flist, dir) eina_stringshare_del(dir);
return NULL;
}
@@ -1700,7 +1696,7 @@ err:
}
Eina_Bool
-_elm_config_save(void)
+_elm_config_save(const char *profile)
{
char buf[4096], buf2[4096];
int ok = 0, ret;
@@ -1721,7 +1717,7 @@ _elm_config_save(void)
}
len = _elm_config_user_dir_snprintf(buf, sizeof(buf), "config/%s",
- _elm_profile);
+ profile ? profile : _elm_profile);
if (len + 1 >= sizeof(buf))
return EINA_FALSE;
@@ -1733,8 +1729,11 @@ _elm_config_save(void)
return EINA_FALSE;
}
- if (!_elm_config_profile_save())
- return EINA_FALSE;
+ if (!profile)
+ {
+ if (!_elm_config_profile_save())
+ return EINA_FALSE;
+ }
buf[len] = '/';
len++;
@@ -1889,7 +1888,7 @@ _config_update(void)
_elm_config->config_version = ELM_CONFIG_VERSION;
/* after updating user config, we must save */
_config_free(tcfg);
- _elm_config_save();
+ _elm_config_save(NULL);
}
static void
@@ -2387,7 +2386,7 @@ elm_config_password_show_last_timeout_set(double password_show_last_timeout)
EAPI Eina_Bool
elm_config_save(void)
{
- return _elm_config_save();
+ return _elm_config_save(NULL);
}
EAPI void
@@ -2418,7 +2417,13 @@ elm_config_profile_dir_free(const char *p_dir)
EAPI Eina_List *
elm_config_profile_list_get(void)
{
- return _elm_config_profiles_list();
+ return _elm_config_profiles_list(EINA_TRUE);
+}
+
+EAPI Eina_List *
+elm_config_profile_list_full_get(void)
+{
+ return _elm_config_profiles_list(EINA_FALSE);
}
EAPI void
@@ -2437,6 +2442,14 @@ elm_config_profile_set(const char *profile)
_elm_config_profile_set(profile);
}
+EAPI void
+elm_config_profile_save(const char *profile)
+{
+ EINA_SAFETY_ON_NULL_RETURN(profile);
+ _elm_config_save(profile);
+}
+
+
EAPI const char *
elm_config_engine_get(void)
{
@@ -3368,6 +3381,7 @@ elm_config_all_flush(void)
}
ecore_file_unlink(buf2);
+ elm_config_save();
return;
err:
diff --git a/src/lib/elm_config.h b/src/lib/elm_config.h
index e7bece0f1..12c2ff460 100644
--- a/src/lib/elm_config.h
+++ b/src/lib/elm_config.h
@@ -116,6 +116,22 @@ EAPI void elm_config_profile_dir_free(const char *p_dir);
EAPI Eina_List *elm_config_profile_list_get(void);
/**
+ * Get Elementary's list of available profiles including hidden ones.
+ *
+ * This gets a full list of profiles even with hidden names that should not
+ * be user-visible.
+ *
+ * @return The profiles list. List node data are the profile name
+ * strings.
+ * @ingroup Profile
+ *
+ * @note One must free this list, after usage, with the function
+ * elm_config_profile_list_free().
+ * @since 1.17
+ */
+EAPI Eina_List *elm_config_profile_list_full_get(void);
+
+/**
* Free Elementary's list of available profiles.
*
* @param l The profiles list, as returned by elm_config_profile_list_get().
@@ -138,6 +154,20 @@ EAPI void elm_config_profile_list_free(Eina_List *l);
EAPI void elm_config_profile_set(const char *profile);
/**
+ * Take the current config and write it out to the named profile
+ *
+ * This will take the current in-memory config and write it out to the named
+ * profile specified by @p profile. This will not change profile for the
+ * application or make other processes switch profile.
+ *
+ * @param profile The profile's name
+ * @ingroup Profile
+ *
+ * @since 1.17
+ */
+EAPI void elm_config_profile_save(const char *profile);
+
+/**
* @}
*/
diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h
index f0dfd01da..f5f1cde38 100644
--- a/src/lib/elm_priv.h
+++ b/src/lib/elm_priv.h
@@ -433,7 +433,7 @@ void _elm_config_init(void);
void _elm_config_sub_init(void);
void _elm_config_shutdown(void);
void _elm_config_sub_shutdown(void);
-Eina_Bool _elm_config_save(void);
+Eina_Bool _elm_config_save(const char *profile);
void _elm_config_reload(void);
size_t _elm_config_user_dir_snprintf(char *dst, size_t size,
const char *fmt, ...)
@@ -445,7 +445,7 @@ void _elm_recache(void);
const char *_elm_config_current_profile_get(void);
const char *_elm_config_profile_dir_get(const char *prof,
Eina_Bool is_user);
-Eina_List *_elm_config_profiles_list(void);
+Eina_List *_elm_config_profiles_list(Eina_Bool hide_profiles);
void _elm_config_all_update(void);
void _elm_config_profile_set(const char *profile);