efreet: Store known desktop environments

This commit is contained in:
Sebastian Dransfeld 2014-09-18 09:23:00 +02:00
parent 5bc2efcf87
commit 54d5653e1b
3 changed files with 30 additions and 0 deletions

View File

@ -39,6 +39,7 @@ static Eina_Hash *name = NULL;
static Eina_Hash *generic_name = NULL;
static Eina_Hash *comment = NULL;
static Eina_Hash *exec = NULL;
static Eina_Hash *environments = NULL;
static int
cache_add(const char *path, const char *file_id, int priority EINA_UNUSED, int *changed)
@ -118,6 +119,8 @@ cache_add(const char *path, const char *file_id, int priority EINA_UNUSED, int *
ADD_ELEM(desk->generic_name, generic_name);
ADD_ELEM(desk->comment, comment);
ADD_ELEM(desk->exec, exec);
ADD_LIST(desk->only_show_in, environments);
ADD_LIST(desk->not_show_in, environments);
eina_hash_add(file_ids, file_id, desk->orig_path);
eina_hash_add(desktops, desk->orig_path, desk);
}
@ -352,6 +355,7 @@ main(int argc, char **argv)
generic_name = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_array_string_free));
comment = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_array_string_free));
exec = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_array_string_free));
environments = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_array_string_free));
dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(),
"applications");
@ -401,6 +405,7 @@ main(int argc, char **argv)
STORE_HASH_ARRAY(generic_name);
STORE_HASH_ARRAY(comment);
STORE_HASH_ARRAY(exec);
STORE_HASH_ARRAY(environments);
if (eina_hash_population(file_ids) > 0)
{
hash.hash = file_ids;
@ -414,6 +419,7 @@ main(int argc, char **argv)
eina_hash_free(generic_name);
eina_hash_free(comment);
eina_hash_free(exec);
eina_hash_free(environments);
if (old_file_ids)
{

View File

@ -318,6 +318,20 @@ efreet_util_desktop_category_list(const char *category)
return efreet_util_cache_list("categories", category);
}
EAPI Eina_List *
efreet_util_desktop_environments_list(void)
{
Efreet_Cache_Array_String *array;
Eina_List *ret = NULL;
unsigned int i;
array = efreet_cache_util_names("environments_list");
if (!array) return NULL;
for (i = 0; i < array->array_count; i++)
ret = eina_list_append(ret, array->array[i]);
return ret;
}
static int
efreet_util_glob_match(const char *str, const char *glob)
{

View File

@ -152,6 +152,16 @@ EAPI Eina_List *efreet_util_desktop_category_list(const char *category);
*/
EAPI Eina_List *efreet_util_menus_find(void);
/**
* Find all known desktop environments
* This list must be freed using EINA_LIST_FREE
* @since 1.12
*
* @return an Eina_List of desktop environments names (const char *)
*/
EAPI Eina_List *efreet_util_desktop_environments_list(void);
/**
* @}
*/