From 54d5653e1bf1a6e7521dd18209b53e609725d607 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Thu, 18 Sep 2014 09:23:00 +0200 Subject: [PATCH] efreet: Store known desktop environments --- src/bin/efreet/efreet_desktop_cache_create.c | 6 ++++++ src/lib/efreet/efreet_utils.c | 14 ++++++++++++++ src/lib/efreet/efreet_utils.h | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/bin/efreet/efreet_desktop_cache_create.c b/src/bin/efreet/efreet_desktop_cache_create.c index cbaef0efa1..849d47c6d4 100644 --- a/src/bin/efreet/efreet_desktop_cache_create.c +++ b/src/bin/efreet/efreet_desktop_cache_create.c @@ -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) { diff --git a/src/lib/efreet/efreet_utils.c b/src/lib/efreet/efreet_utils.c index a0bc37c8d8..2f59272f00 100644 --- a/src/lib/efreet/efreet_utils.c +++ b/src/lib/efreet/efreet_utils.c @@ -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) { diff --git a/src/lib/efreet/efreet_utils.h b/src/lib/efreet/efreet_utils.h index 4075abcfa0..aef0511eea 100644 --- a/src/lib/efreet/efreet_utils.h +++ b/src/lib/efreet/efreet_utils.h @@ -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); + + /** * @} */