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);
}
else
{
- char *str;
-
IF_FREE(desktop->orig_path);
IF_FREE(desktop->version);
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);
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);
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);
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;
}
* 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;
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;
}
/*