efreet: Store known desktop environments
authorSebastian Dransfeld <sd@tango.flipp.net>
Thu, 18 Sep 2014 07:23:00 +0000 (09:23 +0200)
committerSebastian Dransfeld <sd@tango.flipp.net>
Thu, 18 Sep 2014 08:48:50 +0000 (10:48 +0200)
src/bin/efreet/efreet_desktop_cache_create.c
src/lib/efreet/efreet_utils.c
src/lib/efreet/efreet_utils.h

index cbaef0e..849d47c 100644 (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)
     {
index a0bc37c..2f59272 100644 (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)
 {
index 4075abc..aef0511 100644 (file)
@@ -153,6 +153,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);
+
+
+/**
  * @}
  */
 #endif