desktop->generic_name = strdup("Test Application");
desktop->exec = strdup("efreet_test");
desktop->categories = NULL;
- desktop->categories = eina_list_append(desktop->categories, strdup("Test"));
- desktop->categories = eina_list_append(desktop->categories, strdup("Enlightenment"));
+ desktop->categories = eina_list_append(desktop->categories, eina_stringshare_add("Test"));
+ desktop->categories = eina_list_append(desktop->categories, eina_stringshare_add("Enlightenment"));
printf("save test: %d\n", efreet_desktop_save(desktop));
unlink("/tmp/test.desktop");
efreet_desktop_free(desktop);
expected = eina_list_append(expected, "app '/relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test single uri */
info->type = 'u';
expected = eina_list_append(expected, "app 'file:///relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test single dir */
info->type = 'd';
expected = eina_list_append(expected, "app '/'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test single names */
expected = eina_list_append(expected, "app 'relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test multiple fullpaths */
info->type = 'F';
expected = eina_list_append(expected, "app '/tmp/absolute_path' '/relative_path' '/tmp/absolute_uri' '/relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test multiple URIs */
info->type = 'U';
expected = eina_list_append(expected, "app 'file:///tmp/absolute_path' 'file:///relative_path' 'file:///tmp/absolute_uri' 'file:///relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test multiple dirs */
info->type = 'D';
expected = eina_list_append(expected, "app '/tmp' '/' '/tmp' '/'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test multiple names */
info->type = 'N';
expected = eina_list_append(expected, "app 'absolute_path' 'relative_path' 'absolute_uri' 'relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test icon appending */
info->type = 'i';
expected = eina_list_append(expected, "app --icon 'icon.png'");
efreet_desktop_command_get(desktop, NULL, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test app name */
info->type = 'c';
expected = eina_list_append(expected, "app 'App Name'");
efreet_desktop_command_get(desktop, NULL, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* test desktop path */
info->type = 'k';
expected = eina_list_append(expected, "app 'test.desktop'");
efreet_desktop_command_get(desktop, NULL, _cb_command, info);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ expected = eina_list_free(expected);
/* clean up */
efreet_desktop_free(desktop);
- while (files)
- files = eina_list_remove_list(files, expected);
- while (expected)
- expected = eina_list_remove_list(expected, expected);
+ files = eina_list_free(files);
+ expected = eina_list_free(expected);
ret = info->error > 0 ? 0 : 1;
free(info);
info->error++;
}
}
-
- free(exec);
return NULL;
}
const char *dir);
static int efreet_icon_cache_find(Efreet_Icon_Cache *value, const char *key);
-static void efreet_icon_cache_flush(Eina_List *list);
+static void efreet_icon_cache_flush(Efreet_Icon_Theme *theme, Eina_List *list);
static void efreet_icon_cache_free(Efreet_Icon_Cache *value);
static char *efreet_icon_cache_check(Efreet_Icon_Theme *theme, const char *icon, unsigned int size);
static void efreet_icon_cache_add(Efreet_Icon_Theme *theme, const char *icon, unsigned int size, const char *value);
+static Efreet_Icon_Theme *fake_null = NULL;
+
static void
_efreet_icon_cache_list_destroy(Eina_List *list)
{
EAPI Efreet_Icon_Theme *
efreet_icon_theme_find(const char *theme_name)
{
- const char *key;
Efreet_Icon_Theme *theme;
- key = eina_stringshare_add(theme_name);
- theme = eina_hash_find(efreet_icon_themes, key);
+ if (!theme_name) return fake_null;
+
+ theme = eina_hash_find(efreet_icon_themes, theme_name);
if (!theme)
{
efreet_icon_theme_dir_scan_all(theme_name);
- theme = eina_hash_find(efreet_icon_themes, key);
+ theme = eina_hash_find(efreet_icon_themes, theme_name);
}
- eina_stringshare_del(key);
return theme;
}
{
theme = efreet_icon_theme_new();
theme->fake = 1;
- theme->name.internal = eina_stringshare_add(theme_name);
- eina_hash_del(efreet_icon_themes, (void *)theme->name.internal, NULL);
- eina_hash_add(efreet_icon_themes, (void *)theme->name.internal, theme);
+ if (theme_name)
+ {
+ theme->name.internal = eina_stringshare_add(theme_name);
+ eina_hash_del(efreet_icon_themes, (void *)theme->name.internal, NULL);
+ eina_hash_add(efreet_icon_themes, (void *)theme->name.internal, theme);
+ }
+ else
+ {
+ theme->name.internal = NULL;
+ fake_null = theme;
+ }
}
return theme;
tmps = eina_list_append(tmps, efreet_icon_remove_extension(icon));
value = efreet_icon_list_find_helper(theme, tmps, size);
- while (tmps)
- {
- data = eina_list_data_get(tmps);
+ EINA_LIST_FREE(tmps, data)
free(data);
- tmps = eina_list_remove_list(tmps, tmps);
- }
}
#else
value = efreet_icon_list_find_helper(theme, icons, size);
char *icon;
if (!icon_name) return NULL;
- icon = efreet_icon_cache_check(NULL, icon_name, 0);
+ icon = efreet_icon_cache_check(efreet_icon_find_theme_check(NULL), icon_name, 0);
if (icon) return icon;
icon = efreet_icon_fallback_dir_scan(efreet_icon_deprecated_user_dir_get(), icon_name);
icon = efreet_icon_fallback_dir_scan(dir, icon_name);
if (icon)
{
- efreet_icon_cache_add(NULL, icon_name, 0, icon);
+ efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon);
return icon;
}
}
icon = efreet_icon_fallback_dir_scan(path, icon_name);
if (icon)
{
- efreet_icon_cache_add(NULL, icon_name, 0, icon);
+ efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon);
return icon;
}
}
icon = efreet_icon_fallback_dir_scan("/usr/share/pixmaps", icon_name);
}
- efreet_icon_cache_add(NULL, icon_name, 0, icon);
+ efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon);
return icon;
}
/* have we modified this directory since our last cache check? */
if (stat(dir, &buf) || (buf.st_mtime > theme->last_cache_check))
{
- eina_hash_del(efreet_icon_cache, &theme, NULL);
+ eina_hash_del(efreet_icon_cache, theme, NULL);
return 0;
}
static void
efreet_icon_theme_dir_validity_check(void)
{
- Eina_List *keys, *l;
+ Eina_List *keys;
const char *name;
Eina_Iterator *it;
eina_iterator_foreach(it, EINA_EACH(_hash_keys), &keys);
eina_iterator_free(it);
- EINA_LIST_FOREACH(keys, l, name)
+ EINA_LIST_FREE(keys, name)
{
Efreet_Icon_Theme *theme;
if (theme && !theme->valid && !theme->fake)
eina_hash_del(efreet_icon_themes, name, theme);
}
- while (keys)
- keys = eina_list_remove_list(keys, keys);
}
/**
}
static void
-efreet_icon_cache_flush(Eina_List *list)
+efreet_icon_cache_flush(Efreet_Icon_Theme *theme, Eina_List *list)
{
/* TODO:
* * Dynamic cache size
efreet_icon_cache_free(cache);
list = eina_list_remove_list(list, last);
}
+
+ eina_hash_modify(efreet_icon_cache, theme, list);
}
static void
char key[4096];
struct stat st;
- list = eina_hash_find(efreet_icon_cache, &theme);
+ list = eina_hash_find(efreet_icon_cache, theme);
if (!list) return NULL;
snprintf(key, sizeof(key), "%s %d", icon, size);
if (!cache->path)
{
list = eina_list_promote_list(list, eina_list_data_find_list(list, cache));
+ eina_hash_modify(efreet_icon_cache, theme, list);
return NON_EXISTING;
}
else if (!stat(cache->path, &st) && st.st_mtime == cache->lasttime)
{
list = eina_list_promote_list(list, eina_list_data_find_list(list, cache));
+ eina_hash_modify(efreet_icon_cache, theme, list);
return strdup(cache->path);
}
efreet_icon_cache_free(cache);
list = eina_list_remove(list, cache);
+ if (list != NULL) eina_hash_modify(efreet_icon_cache, theme, list);
+ else eina_hash_del(efreet_icon_cache, theme, NULL);
}
return NULL;
}
char key[4096];
struct stat st;
- list = eina_hash_find(efreet_icon_cache, &theme);
+ list = eina_hash_find(efreet_icon_cache, theme);
snprintf(key, sizeof(key), "%s %d", icon, size);
cache = NEW(Efreet_Icon_Cache, 1);
l = list;
list = eina_list_prepend(list, cache);
- if (!l) eina_hash_add(efreet_icon_cache, &theme, list);
- else eina_hash_modify(efreet_icon_cache, &theme, list);
+ if (!l) eina_hash_add(efreet_icon_cache, theme, list);
+ else eina_hash_modify(efreet_icon_cache, theme, list);
- efreet_icon_cache_flush(list);
+ efreet_icon_cache_flush(theme, list);
}