From 736dbfed460bf8549840c48b6af001225402f65a Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Wed, 20 Oct 2010 20:39:54 +0000 Subject: [PATCH] store OnlyShowIn and NotShowIn in struct SVN revision: 53691 --- legacy/efreet/src/lib/efreet_desktop.c | 54 +++++++++++++++----------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/legacy/efreet/src/lib/efreet_desktop.c b/legacy/efreet/src/lib/efreet_desktop.c index 51bf4e45dc..eac68f50ff 100644 --- a/legacy/efreet/src/lib/efreet_desktop.c +++ b/legacy/efreet/src/lib/efreet_desktop.c @@ -126,7 +126,7 @@ static Eina_Bool efreet_desktop_x_fields_save(const Eina_Hash *hash, const void *key, void *value, void *fdata); -static int efreet_desktop_environment_check(Efreet_Ini *ini); +static int efreet_desktop_environment_check(Efreet_Desktop *desktop); static int efreet_desktop_write_cache_dirs_file(void); @@ -541,8 +541,6 @@ efreet_desktop_free(Efreet_Desktop *desktop) } else { - char *str; - IF_FREE(desktop->orig_path); IF_FREE(desktop->version); @@ -557,13 +555,11 @@ efreet_desktop_free(Efreet_Desktop *desktop) IF_FREE(desktop->path); IF_FREE(desktop->startup_wm_class); - IF_FREE_LIST(desktop->only_show_in, free); - IF_FREE_LIST(desktop->not_show_in, free); + IF_FREE_LIST(desktop->only_show_in, eina_stringshare_del); + IF_FREE_LIST(desktop->not_show_in, eina_stringshare_del); - EINA_LIST_FREE(desktop->categories, str) - eina_stringshare_del(str); - EINA_LIST_FREE(desktop->mime_types, str) - eina_stringshare_del(str); + IF_FREE_LIST(desktop->categories, eina_stringshare_del); + IF_FREE_LIST(desktop->mime_types, eina_stringshare_del); IF_FREE_HASH(desktop->x); @@ -957,8 +953,8 @@ efreet_desktop_read(Efreet_Desktop *desktop) error = 1; } - if (!error && !efreet_desktop_environment_check(ini)) error = 1; if (!error && !efreet_desktop_generic_fields_parse(desktop, ini)) error = 1; + if (!error && !efreet_desktop_environment_check(desktop)) error = 1; if (!error) eina_hash_foreach(ini->section, efreet_desktop_x_fields_parse, desktop); @@ -1130,6 +1126,7 @@ static int efreet_desktop_generic_fields_parse(Efreet_Desktop *desktop, Efreet_Ini *ini) { const char *val; + const char *not_show_in = NULL, *only_show_in = NULL; val = efreet_ini_localestring_get(ini, "Name"); if (val) desktop->name = strdup(val); @@ -1151,6 +1148,13 @@ efreet_desktop_generic_fields_parse(Efreet_Desktop *desktop, Efreet_Ini *ini) desktop->no_display = efreet_ini_boolean_get(ini, "NoDisplay"); desktop->hidden = efreet_ini_boolean_get(ini, "Hidden"); + only_show_in = efreet_ini_string_get(ini, "OnlyShowIn"); + not_show_in = efreet_ini_string_get(ini, "NotShowIn"); + if (only_show_in && not_show_in) + WRN("Both OnlyShowIn and NotShowIn in %s, preferring OnlyShowIn", desktop->orig_path); + if (only_show_in) desktop->only_show_in = efreet_desktop_string_list_parse(only_show_in); + else if (not_show_in) desktop->not_show_in = efreet_desktop_string_list_parse(not_show_in); + return 1; } @@ -1250,7 +1254,7 @@ efreet_desktop_x_fields_save(const Eina_Hash *hash __UNUSED__, const void *key, * based on the values of the OnlyShowIn and NotShowIn fields */ static int -efreet_desktop_environment_check(Efreet_Ini *ini) +efreet_desktop_environment_check(Efreet_Desktop *desktop) { Eina_List *list; int found = 0; @@ -1259,28 +1263,34 @@ efreet_desktop_environment_check(Efreet_Ini *ini) if (!desktop_environment) return 1; - list = efreet_desktop_string_list_parse(efreet_ini_string_get(ini, "OnlyShowIn")); - if (list) + if (desktop->only_show_in) { - EINA_LIST_FREE(list, val) + EINA_LIST_FOREACH(desktop->only_show_in, list, val) { if (!strcmp(val, desktop_environment)) + { found = 1; - eina_stringshare_del(val); + break; + } } - return found; } - list = efreet_desktop_string_list_parse(efreet_ini_string_get(ini, "NotShowIn")); - EINA_LIST_FREE(list, val) + + if (desktop->not_show_in) { - if (!strcmp(val, desktop_environment)) - found = 1; - eina_stringshare_del(val); + EINA_LIST_FOREACH(desktop->not_show_in, list, val) + { + if (!strcmp(val, desktop_environment)) + { + found = 1; + break; + } + } + return !found; } - return !found; + return 1; } /*