#define THEME "Tango"
#define FREE(x) do { free(x); x = NULL; } while (0);
+static Eina_Bool _hash_keys(Eina_Hash *hash, const char *key, void *list);
static void ef_icon_theme_themes_find(const char *search_dir,
- Ecore_Hash *themes);
+ Eina_Hash *themes);
static void ef_icons_find(Efreet_Icon_Theme *theme, Ecore_List *themes,
- Ecore_Hash *icons);
-static void ef_read_dir(const char *dir, Ecore_Hash *icons);
+ Eina_Hash *icons);
+static void ef_read_dir(const char *dir, Eina_Hash *icons);
int
ef_cb_efreet_icon_theme(void)
return ret;
}
+static Eina_Bool
+_hash_keys(Eina_Hash *hash, const char *key, void *list)
+{
+ ecore_list_append(list, key);
+ return EINA_TRUE;
+}
+
int
ef_cb_efreet_icon_theme_list(void)
{
int ret = 1;
Ecore_List *themes;
- Ecore_Hash *dirs;
+ Eina_Hash *dirs;
+ Eina_Iterator *it;
Efreet_Icon_Theme *theme;
Ecore_List *icon_dirs;
const char *dir;
char buf[PATH_MAX];
+ void *value;
- dirs = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(dirs, free);
+ dirs = eina_hash_string_superfast_new(free);
icon_dirs = efreet_data_dirs_get();
ecore_list_first_goto(icon_dirs);
ecore_list_first_goto(themes);
while ((theme = ecore_list_next(themes)))
{
- if (ecore_hash_get(dirs, theme->name.internal))
- ecore_hash_remove(dirs, theme->name.internal);
+ if ((eina_hash_find(dirs, theme->name.internal)))
+ eina_hash_del(dirs, theme->name.internal, NULL);
else
{
printf("efreet_icon_theme_list_get() returned %s which we didn't "
}
ecore_list_destroy(themes);
- themes = ecore_hash_keys(dirs);
+ themes = ecore_list_new();
+ it = eina_hash_iterator_key_new(dirs);
+ eina_iterator_foreach(it, EINA_EACH(_hash_keys), themes);
+ eina_iterator_free(it);
+
if (ecore_list_count(themes) > 0)
{
char *dir;
ret = 0;
}
ecore_list_destroy(themes);
- ecore_hash_destroy(dirs);
+ eina_hash_free(dirs);
return ret;
}
static void
-ef_icon_theme_themes_find(const char *search_dir, Ecore_Hash *themes)
+ef_icon_theme_themes_find(const char *search_dir, Eina_Hash *themes)
{
Ecore_List *dirs;
char *dir;
char p[PATH_MAX];
/* if we've already added the theme we're done */
- if (ecore_hash_get(themes, dir))
+ if (eina_hash_find(themes, dir))
{
free(dir);
continue;
if (!skip)
{
d = strdup(dir);
- ecore_hash_set(themes, d, d);
+ eina_hash_add(themes, dir, d);
}
}
free(dir);
ef_cb_efreet_icon_match(void)
{
int i, ret = 1;
- Ecore_Hash *icon_hash;
+ Eina_Hash *icon_hash;
Efreet_Icon_Theme *theme;
Ecore_List *themes;
return 1;
}
- icon_hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(icon_hash, free);
- ecore_hash_free_value_cb_set(icon_hash, free);
+ icon_hash = eina_hash_string_superfast_new(free);
ef_icons_find(theme, themes, icon_hash);
ecore_list_destroy(themes);
if (!path)
{
#if 1
- if (ecore_hash_get(icon_hash, icons[i]))
+ if (eina_hash_find(icon_hash, icons[i]))
{
printf("NOT FOUND %s\n", icons[i]);
ret = 0;
#endif
continue;
}
- else if (!ecore_hash_get(icon_hash, icons[i]))
+ else if (!eina_hash_find(icon_hash, icons[i]))
{
printf("Found icon not in hash: %s\n", icons[i]);
}
free(path);
}
printf("Time: %f\n", (ecore_time_get() - start));
- ecore_hash_destroy(icon_hash);
+ eina_hash_free(icon_hash);
start = ecore_time_get();
for (i = 0; icons[i] != NULL; i++)
}
static void
-ef_icons_find(Efreet_Icon_Theme *theme, Ecore_List *themes, Ecore_Hash *icons)
+ef_icons_find(Efreet_Icon_Theme *theme, Ecore_List *themes, Eina_Hash *icons)
{
char path[PATH_MAX];
}
static void
-ef_read_dir(const char *dir, Ecore_Hash *icons)
+ef_read_dir(const char *dir, Eina_Hash *icons)
{
Ecore_List *files;
char *file;
{
*p = '\0';
- ecore_hash_set(icons, strdup(file), strdup(file));
+ eina_hash_add(icons, file, strdup(file));
}
FREE(file);
* A cache of all loaded desktops, hashed by file name.
* Values are Efreet_Desktop structures
*/
-static Ecore_Hash *efreet_desktop_cache = NULL;
+static Eina_Hash *efreet_desktop_cache = NULL;
/**
* A list of the desktop types available
Efreet_Ini *ini);
static void efreet_desktop_generic_fields_save(Efreet_Desktop *desktop,
Efreet_Ini *ini);
-static void efreet_desktop_x_fields_parse(Ecore_Hash_Node *node,
- Efreet_Desktop *desktop);
-static void efreet_desktop_x_fields_save(Ecore_Hash_Node *node,
- Efreet_Ini *ini);
+static Eina_Bool efreet_desktop_x_fields_parse(const Eina_Hash *hash,
+ const void *key,
+ void *data,
+ void *fdata);
+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 char *efreet_string_append(char *dest, int *size,
int *len, const char *src);
if (!eina_stringshare_init()) return --init;
if (!ecore_file_init()) return --init;
- efreet_desktop_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(efreet_desktop_cache, ECORE_FREE_CB(free));
+ efreet_desktop_cache = eina_hash_string_superfast_new(NULL);
efreet_desktop_types = ecore_list_new();
ecore_list_free_cb_set(efreet_desktop_types,
if (efreet_desktop_cache)
{
- desktop = ecore_hash_get(efreet_desktop_cache, file);
+ desktop = eina_hash_find(efreet_desktop_cache, file);
if (desktop)
{
if (efreet_desktop_cache_check(desktop))
}
desktop->cached = 0;
- ecore_hash_remove(efreet_desktop_cache, file);
+ eina_hash_del(efreet_desktop_cache, file, NULL);
}
}
desktop = efreet_desktop_new(file);
if (!desktop) return NULL;
- ecore_hash_set(efreet_desktop_cache, strdup(file), desktop);
+ eina_hash_add(efreet_desktop_cache, file, desktop);
desktop->cached = 1;
return desktop;
}
if (!error && !efreet_desktop_environment_check(ini)) error = 1;
if (!error && !efreet_desktop_generic_fields_parse(desktop, ini)) error = 1;
if (!error)
- ecore_hash_for_each_node(ini->section,
- ECORE_FOR_EACH(efreet_desktop_x_fields_parse), desktop);
+ eina_hash_foreach(ini->section, efreet_desktop_x_fields_parse, desktop);
efreet_ini_free(ini);
if (!efreet_ini_save(ini, desktop->orig_path)) ok = 0;
else
{
- if (desktop != ecore_hash_get(efreet_desktop_cache, desktop->orig_path))
+ if (desktop != eina_hash_find(efreet_desktop_cache, desktop->orig_path))
{
desktop->cached = 1;
- ecore_hash_set(efreet_desktop_cache,
- strdup(desktop->orig_path), desktop);
+ eina_hash_del(efreet_desktop_cache, desktop->orig_path, NULL);
+ eina_hash_add(efreet_desktop_cache, desktop->orig_path,
+ desktop);
}
}
}
EAPI int
efreet_desktop_save_as(Efreet_Desktop *desktop, const char *file)
{
- if (desktop == ecore_hash_get(efreet_desktop_cache, desktop->orig_path))
+ if (desktop == eina_hash_find(efreet_desktop_cache, desktop->orig_path))
{
desktop->cached = 0;
- ecore_hash_remove(efreet_desktop_cache, desktop->orig_path);
+ eina_hash_del(efreet_desktop_cache, desktop->orig_path, NULL);
}
FREE(desktop->orig_path);
desktop->orig_path = strdup(file);
if (desktop->ref > 0) return;
if (desktop->cached && efreet_desktop_cache)
- ecore_hash_remove(efreet_desktop_cache, desktop->orig_path);
+ eina_hash_del(efreet_desktop_cache, desktop->orig_path, NULL);
IF_FREE(desktop->orig_path);
efreet_ini_boolean_set(ini, "NoDisplay", desktop->no_display);
efreet_ini_boolean_set(ini, "Hidden", desktop->hidden);
- if (desktop->x) ecore_hash_for_each_node(desktop->x,
- ECORE_FOR_EACH(efreet_desktop_x_fields_save),
- ini);
+ if (desktop->x) eina_hash_foreach(desktop->x, efreet_desktop_x_fields_save,
+ ini);
}
/**
* @return Returns no value
* @brief Parses out an X- key from @a node and stores in @a desktop
*/
-static void
-efreet_desktop_x_fields_parse(Ecore_Hash_Node *node, Efreet_Desktop *desktop)
+static Eina_Bool
+efreet_desktop_x_fields_parse(const Eina_Hash *hash, const void *key, void *value, void *fdata)
{
- if (strncmp(node->key, "X-", 2)) return;
+ Efreet_Desktop * desktop = fdata;
- if (!desktop->x)
- {
- desktop->x = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(desktop->x,
- ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(desktop->x,
- ECORE_FREE_CB(eina_stringshare_del));
- }
- ecore_hash_set(desktop->x, (void *)eina_stringshare_add(node->key),
- (void *)eina_stringshare_add(node->value));
+ if (strncmp(key, "X-", 2)) return EINA_TRUE;
+
+ if (desktop && !desktop->x)
+ desktop->x = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
+ eina_hash_del(desktop->x, key, NULL);
+ eina_hash_add(desktop->x, key, (void *)eina_stringshare_add(value));
+
+ return EINA_TRUE;
}
/**
* @return Returns no value
* @brief Stores an X- key from @a node and stores in @a ini
*/
-static void
-efreet_desktop_x_fields_save(Ecore_Hash_Node *node, Efreet_Ini *ini)
+static Eina_Bool
+efreet_desktop_x_fields_save(const Eina_Hash *hash, const void *key, void *value, void *fdata)
{
- efreet_ini_string_set(ini, node->key, node->value);
+ Efreet_Ini *ini = fdata;
+ efreet_ini_string_set(ini, key, value);
+
+ return EINA_TRUE;
}
unsigned char startup_notify:1; /**< The starup notify settings of the app */
unsigned char cached:1; /**< The desktop file is cached by Efreet */
- Ecore_Hash *x; /**< Keep track of all user extensions, keys that begin with X- */
+ Eina_Hash *x; /**< Keep track of all user extensions, keys that begin with X- */
void *type_data; /**< Type specific data for custom types */
};
static char *efreet_icon_deprecated_user_dir = NULL;
static char *efreet_icon_user_dir = NULL;
-static Ecore_Hash *efreet_icon_themes = NULL;
+static Eina_Hash *efreet_icon_themes = NULL;
static Ecore_List *efreet_icon_extensions = NULL;
static Ecore_List *efreet_extra_icon_dirs = NULL;
-static Ecore_Hash *efreet_icon_cache = NULL;
+static Eina_Hash *efreet_icon_cache = NULL;
static int efreet_icon_init_count = 0;
for (i = 0; default_exts[i] != NULL; i++)
ecore_list_append(efreet_icon_extensions, strdup(default_exts[i]));
- efreet_icon_themes = ecore_hash_new(NULL, NULL);
- ecore_hash_free_value_cb_set(efreet_icon_themes,
- ECORE_FREE_CB(efreet_icon_theme_free));
+ efreet_icon_themes = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_icon_theme_free));
efreet_extra_icon_dirs = ecore_list_new();
- efreet_icon_cache = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
- ecore_hash_free_value_cb_set(efreet_icon_cache, ECORE_FREE_CB(ecore_list_destroy));
+ efreet_icon_cache = eina_hash_pointer_new(EINA_FREE_CB(ecore_list_destroy));
}
return 1;
return efreet_extra_icon_dirs;
}
+static Eina_Bool
+_hash_keys(Eina_Hash *hash, const void *key, void *list)
+{
+ ecore_list_append(list, key);
+ return EINA_TRUE;
+}
/**
* @return Returns a list of Efreet_Icon structs for all the non-hidden icon
* themes
{
Ecore_List *list, *theme_list;
char *dir;
+ Eina_Iterator *it;
/* update the list to include all icon themes */
efreet_icon_theme_dir_scan_all(NULL);
/* create the list for the user */
list = ecore_list_new();
- theme_list = ecore_hash_keys(efreet_icon_themes);
+ theme_list = ecore_list_new();
+ it = eina_hash_iterator_key_new(efreet_icon_themes);
+ eina_iterator_foreach(it, EINA_EACH(_hash_keys), theme_list);
+ eina_iterator_free(it);
ecore_list_first_goto(theme_list);
while ((dir = ecore_list_next(theme_list)))
{
Efreet_Icon_Theme *theme;
- theme = ecore_hash_get(efreet_icon_themes, dir);
+ theme = eina_hash_find(efreet_icon_themes, dir);
if (theme->hidden || theme->fake) continue;
#ifndef STRICT_SPEC
if (!theme->name.name) continue;
Efreet_Icon_Theme *theme;
key = eina_stringshare_add(theme_name);
- theme = ecore_hash_get(efreet_icon_themes, key);
+ theme = eina_hash_find(efreet_icon_themes, key);
if (!theme)
{
efreet_icon_theme_dir_scan_all(theme_name);
- theme = ecore_hash_get(efreet_icon_themes, key);
+ theme = eina_hash_find(efreet_icon_themes, key);
}
eina_stringshare_del(key);
theme = efreet_icon_theme_new();
theme->fake = 1;
theme->name.internal = eina_stringshare_add(theme_name);
- ecore_hash_set(efreet_icon_themes, (void *)theme->name.internal, theme);
+ eina_hash_del(efreet_icon_themes, (void *)theme->name.internal, NULL);
+ eina_hash_add(efreet_icon_themes, (void *)theme->name.internal, theme);
}
return theme;
/* have we modified this directory since our last cache check? */
if (stat(dir, &buf) || (buf.st_mtime > theme->last_cache_check))
{
- ecore_hash_remove(efreet_icon_cache, theme);
+ eina_hash_del(efreet_icon_cache, &theme, NULL);
return 0;
}
continue;
key = eina_stringshare_add(dir->d_name);
- theme = ecore_hash_get(efreet_icon_themes, key);
+ theme = eina_hash_find(efreet_icon_themes, key);
if (!theme)
{
theme = efreet_icon_theme_new();
theme->name.internal = key;
- ecore_hash_set(efreet_icon_themes,
- (void *)theme->name.internal, theme);
+ eina_hash_add(efreet_icon_themes,
+ (void *)theme->name.internal, theme);
}
else
{
{
Efreet_Icon_Theme *theme;
- theme = ecore_hash_get(efreet_icon_themes, theme_name);
+ theme = eina_hash_find(efreet_icon_themes, theme_name);
if (theme && !theme->valid && !theme->fake)
- {
- ecore_hash_remove(efreet_icon_themes, theme_name);
- efreet_icon_theme_free(theme);
- }
+ eina_hash_del(efreet_icon_themes, theme_name, theme);
}
}
{
Ecore_List *keys;
const char *name;
+ Eina_Iterator *it;
- keys = ecore_hash_keys(efreet_icon_themes);
+ keys = ecore_list_new();
+ it = eina_hash_iterator_key_new(efreet_icon_themes);
+ eina_iterator_foreach(it, EINA_EACH(_hash_keys), keys);
+ eina_iterator_free(it);
ecore_list_first_goto(keys);
while ((name = ecore_list_next(keys)))
{
Efreet_Icon_Theme *theme;
- theme = ecore_hash_get(efreet_icon_themes, name);
- if (!theme->valid && !theme->fake)
- {
- ecore_hash_remove(efreet_icon_themes, name);
- efreet_icon_theme_free(theme);
- }
+ theme = eina_hash_find(efreet_icon_themes, name);
+ if (theme && !theme->valid && !theme->fake)
+ eina_hash_del(efreet_icon_themes, name, theme);
}
ecore_list_destroy(keys);
}
char key[4096];
struct stat st;
- list = ecore_hash_get(efreet_icon_cache, theme);
+ list = eina_hash_find(efreet_icon_cache, &theme);
if (!list)
{
list = ecore_list_new();
ecore_list_free_cb_set(list, ECORE_FREE_CB(efreet_icon_cache_free));
- ecore_hash_set(efreet_icon_cache, theme, list);
+ eina_hash_add(efreet_icon_cache, &theme, list);
return NULL;
}
char key[4096];
struct stat st;
- list = ecore_hash_get(efreet_icon_cache, theme);
+ list = eina_hash_find(efreet_icon_cache, &theme);
if (!list)
{
list = ecore_list_new();
ecore_list_free_cb_set(list, ECORE_FREE_CB(efreet_icon_cache_free));
- ecore_hash_set(efreet_icon_cache, theme, list);
+ eina_hash_add(efreet_icon_cache, &theme, list);
}
snprintf(key, sizeof(key), "%s %d", icon, size);
#include "Efreet.h"
#include "efreet_private.h"
-static Ecore_Hash *efreet_ini_parse(const char *file);
+static Eina_Hash *efreet_ini_parse(const char *file);
static char *efreet_ini_unescape(const char *str);
-static void efreet_ini_section_save(Ecore_Hash_Node *node, FILE *f);
-static void efreet_ini_value_save(Ecore_Hash_Node *node, FILE *f);
+static Eina_Bool
+efreet_ini_section_save(const Eina_Hash *hash, const void *key, void *data, void *fdata);
+static Eina_Bool
+efreet_ini_value_save(const Eina_Hash *hash, const void *key, void *data, void *fdata);
/**
* The number of times the Ini subsytem has been initialized
/**
* @internal
* @param file The file to parse
- * @return Returns an Ecore_Hash with the contents of @a file, or NULL if the
+ * @return Returns an Eina_Hash with the contents of @a file, or NULL if the
* file fails to parse or if the file doesn't exist
- * @brief Parses the ini file @a file into an Ecore_Hash
+ * @brief Parses the ini file @a file into an Eina_Hash
*/
-static Ecore_Hash *
+static Eina_Hash *
efreet_ini_parse(const char *file)
{
const char *buffer, *line_start;
FILE *f;
- Ecore_Hash *data, *section = NULL;
+ Eina_Hash *data, *section = NULL;
struct stat file_stat;
int line_length, left;
return NULL;
}
- data = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(data, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(data, ECORE_FREE_CB(ecore_hash_destroy));
+ data = eina_hash_string_small_new(EINA_FREE_CB(eina_hash_free));
line_start = buffer;
while (left > 0)
if (line_start[header_length] == ']')
{
- Ecore_Hash *old;
+ Eina_Hash *old;
const char *header;
header = alloca(header_length * sizeof(unsigned char));
memcpy((char*)header, line_start + 1, header_length - 1);
((char*)header)[header_length - 1] = '\0';
- section = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(section,
- ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(section, ECORE_FREE_CB(free));
+ section = eina_hash_string_small_new(free);
- old = ecore_hash_remove(data, header);
+ eina_hash_del(data, header, NULL);
// if (old) printf("[efreet] Warning: duplicate section '%s' "
// "in file '%s'\n", header, file);
- IF_FREE_HASH(old);
- ecore_hash_set(data, (void *)eina_stringshare_add(header),
- section);
+ eina_hash_add(data, header, section);
}
else
{
if (!isspace(line_start[key_end])) key_end++;
/* trim whitespace from start of value */
- for (value_start = sep + 1;
- (value_start < line_length) &&
- isspace(line_start[value_start]); ++value_start)
+ for (value_start = sep + 1;
+ (value_start < line_length) &&
+ isspace(line_start[value_start]); ++value_start)
;
/* trim \n off of end of value */
for (value_end = line_length;
- (value_end > value_start) &&
- ((line_start[value_end] == '\n') ||
- (line_start[value_end] == '\r')); --value_end)
+ (value_end > value_start) &&
+ ((line_start[value_end] == '\n') ||
+ (line_start[value_end] == '\r')); --value_end)
;
if (line_start[value_end] != '\n'
value_end - value_start);
((char*)value)[value_end - value_start] = '\0';
- old = ecore_hash_remove(section, key);
- IF_FREE(old);
-
- ecore_hash_set(section, (void *)eina_stringshare_add(key),
- efreet_ini_unescape(value));
+ eina_hash_del(section, key, NULL);
+ eina_hash_add(section, key, efreet_ini_unescape(value));
}
// else
// {
f = fopen(file, "wb");
if (!f) return 0;
- ecore_hash_for_each_node(ini->data, ECORE_FOR_EACH(efreet_ini_section_save), f);
+ eina_hash_foreach(ini->data, efreet_ini_section_save, f);
fclose(f);
return 1;
{
if (!ini || !ini->data || !section) return 0;
- ini->section = ecore_hash_get(ini->data, section);
+ ini->section = eina_hash_find(ini->data, section);
return (ini->section ? 1 : 0);
}
EAPI void
efreet_ini_section_add(Efreet_Ini *ini, const char *section)
{
- Ecore_Hash *hash;
+ Eina_Hash *hash;
if (!ini || !section) return;
if (!ini->data)
- {
- ini->data = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(ini->data, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(ini->data, ECORE_FREE_CB(ecore_hash_destroy));
- }
- if (ecore_hash_get(ini->data, section)) return;
+ ini->data = eina_hash_string_small_new(EINA_FREE_CB(eina_hash_free));
+ if (eina_hash_find(ini->data, section)) return;
- hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(hash, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(hash, ECORE_FREE_CB(free));
- ecore_hash_set(ini->data, (void *)eina_stringshare_add(section), hash);
+ hash = eina_hash_string_small_new(free);
+ eina_hash_add(ini->data, section, hash);
}
/**
{
if (!ini || !key || !ini->section) return NULL;
- return ecore_hash_get(ini->section, key);
+ return eina_hash_find(ini->section, key);
}
/**
{
if (!ini || !key || !ini->section) return;
- ecore_hash_set(ini->section, (void *)eina_stringshare_add(key), strdup(value));
+ eina_hash_del(ini->section, key, NULL);
+ eina_hash_add(ini->section, key, strdup(value));
}
/**
return buf;
}
-static void
-efreet_ini_section_save(Ecore_Hash_Node *node, FILE *f)
+static Eina_Bool
+efreet_ini_section_save(const Eina_Hash *hash, const void *key, void *value, void *fdata)
{
- fprintf(f, "[%s]\n", (char *)node->key);
- ecore_hash_for_each_node(node->value, ECORE_FOR_EACH(efreet_ini_value_save), f);
+ FILE *f = fdata;
+
+ fprintf(f, "[%s]\n", (char *)key);
+ eina_hash_foreach(value, efreet_ini_value_save, f);
+ return EINA_TRUE;
}
-static void
-efreet_ini_value_save(Ecore_Hash_Node *node, FILE *f)
+static Eina_Bool
+efreet_ini_value_save(const Eina_Hash *hash, const void *key, void *value, void *fdata)
{
- fprintf(f, "%s=%s\n", (char *)node->key, (char *)node->value);
+ FILE *f = fdata;
+
+ fprintf(f, "%s=%s\n", (char *)key, (char *)value);
+ return EINA_TRUE;
}
*/
struct Efreet_Ini
{
- Ecore_Hash *data; /**< Hash of string => (Hash of string => string) */
- Ecore_Hash *section; /**< currently selected section */
+ Eina_Hash *data; /**< Hash of string => (Hash of string => string) */
+ Eina_Hash *section; /**< currently selected section */
};
EAPI Efreet_Ini *efreet_ini_new(const char *file);
Ecore_List *applications; /**< applications in this menu */
Ecore_DList *directory_dirs; /**< .directory file directories */
- Ecore_Hash *directory_cache; /**< .directory dirs */
+ Eina_Hash *directory_cache; /**< .directory dirs */
Ecore_List *moves; /**< List of moves to be handled by the menu */
Ecore_List *filters; /**< Include and Exclude filters */
static const char *efreet_tag_menu = NULL;
static char *efreet_menu_file = NULL; /**< A menu file set explicityl as default */
-static Ecore_Hash *efreet_merged_menus = NULL;
-static Ecore_Hash *efreet_merged_dirs = NULL;
+static Eina_Hash *efreet_merged_menus = NULL;
+static Eina_Hash *efreet_merged_dirs = NULL;
-static Ecore_Hash *efreet_menu_handle_cbs = NULL;
-static Ecore_Hash *efreet_menu_filter_cbs = NULL;
-static Ecore_Hash *efreet_menu_move_cbs = NULL;
-static Ecore_Hash *efreet_menu_layout_cbs = NULL;
+static Eina_Hash *efreet_menu_handle_cbs = NULL;
+static Eina_Hash *efreet_menu_filter_cbs = NULL;
+static Eina_Hash *efreet_menu_move_cbs = NULL;
+static Eina_Hash *efreet_menu_layout_cbs = NULL;
static const char *efreet_menu_prefix_get(void);
int legacy);
static int efreet_menu_directory_dirs_process(Efreet_Menu_Internal *internal);
static int efreet_menu_directory_dir_scan(const char *path,
- const char *relative_path,
- Ecore_Hash *cache);
+ const char *relative_path,
+ Eina_Hash *cache);
static Efreet_Desktop *efreet_menu_directory_get(Efreet_Menu_Internal *internal,
const char *path);
static void efreet_menu_process_filters(Efreet_Menu_Internal *internal,
unsigned int only_unallocated);
static void efreet_menu_process_app_pool(Ecore_List *pool, Ecore_List *applications,
- Ecore_Hash *matches,
+ Eina_Hash *matches,
Efreet_Menu_Filter *filter,
unsigned int only_unallocated);
static int efreet_menu_filter_matches(Efreet_Menu_Filter_Op *op,
if (!eina_stringshare_init()) return 0;
if (!efreet_xml_init()) return 0;
- efreet_menu_handle_cbs = ecore_hash_new(NULL, NULL);
- efreet_menu_filter_cbs = ecore_hash_new(NULL, NULL);
- efreet_menu_move_cbs = ecore_hash_new(NULL, NULL);
- efreet_menu_layout_cbs = ecore_hash_new(NULL, NULL);
+ efreet_menu_handle_cbs = eina_hash_string_superfast_new(NULL);
+ efreet_menu_filter_cbs = eina_hash_string_superfast_new(NULL);
+ efreet_menu_move_cbs = eina_hash_string_superfast_new(NULL);
+ efreet_menu_layout_cbs = eina_hash_string_superfast_new(NULL);
if (!efreet_menu_handle_cbs || !efreet_menu_filter_cbs
|| !efreet_menu_move_cbs || !efreet_menu_layout_cbs)
return 0;
- ecore_hash_free_key_cb_set(efreet_menu_handle_cbs,
- ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_key_cb_set(efreet_menu_filter_cbs,
- ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_key_cb_set(efreet_menu_move_cbs,
- ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_key_cb_set(efreet_menu_layout_cbs,
- ECORE_FREE_CB(eina_stringshare_del));
-
/* set Menu into it's own so we can check the XML is valid before trying
* to handle it */
efreet_tag_menu = eina_stringshare_add(menu_cbs[0].key);
for (i = 0; menu_cbs[i].key != NULL; i++)
- ecore_hash_set(efreet_menu_handle_cbs,
- (void *)eina_stringshare_add(menu_cbs[i].key),
- menu_cbs[i].cb);
-
+ {
+ eina_hash_del(efreet_menu_handle_cbs,
+ menu_cbs[i].key,
+ NULL);
+ eina_hash_add(efreet_menu_handle_cbs,
+ menu_cbs[i].key,
+ menu_cbs[i].cb);
+ }
for (i = 0; filter_cbs[i].key != NULL; i++)
- ecore_hash_set(efreet_menu_filter_cbs,
- (void *)eina_stringshare_add(filter_cbs[i].key),
- filter_cbs[i].cb);
-
+ {
+ eina_hash_del(efreet_menu_filter_cbs,
+ filter_cbs[i].key,
+ NULL);
+ eina_hash_add(efreet_menu_filter_cbs,
+ filter_cbs[i].key,
+ filter_cbs[i].cb);
+ }
for (i = 0; move_cbs[i].key != NULL; i++)
- ecore_hash_set(efreet_menu_move_cbs,
- (void *)eina_stringshare_add(move_cbs[i].key),
- move_cbs[i].cb);
-
+ {
+ eina_hash_del(efreet_menu_move_cbs,
+ move_cbs[i].key,
+ NULL);
+ eina_hash_add(efreet_menu_move_cbs,
+ move_cbs[i].key,
+ move_cbs[i].cb);
+ }
for (i = 0; layout_cbs[i].key != NULL; i++)
- ecore_hash_set(efreet_menu_layout_cbs,
- (void *)eina_stringshare_add(layout_cbs[i].key),
- layout_cbs[i].cb);
-
+ {
+ eina_hash_del(efreet_menu_layout_cbs,
+ layout_cbs[i].key,
+ NULL);
+ eina_hash_add(efreet_menu_layout_cbs,
+ layout_cbs[i].key,
+ layout_cbs[i].cb);
+ }
return 1;
}
}
IF_FREE_HASH(efreet_merged_menus);
- efreet_merged_menus = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(efreet_merged_menus, ECORE_FREE_CB(free));
+ efreet_merged_menus = eina_hash_string_superfast_new(NULL);
IF_FREE_HASH(efreet_merged_dirs);
- efreet_merged_dirs = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(efreet_merged_dirs, ECORE_FREE_CB(free));
+ efreet_merged_dirs = eina_hash_string_superfast_new(NULL);
/* split appart the filename and the path */
internal = efreet_menu_internal_new();
ecore_list_last_goto(xml->children);
while ((child = ecore_dlist_previous(xml->children)))
{
- cb = ecore_hash_get(efreet_menu_handle_cbs, child->tag);
+ cb = eina_hash_find(efreet_menu_handle_cbs, child->tag);
if (cb)
{
if (!cb(internal, child))
}
/* don't merge the same path twice */
- if (ecore_hash_get(efreet_merged_menus, realpath))
+ if (eina_hash_find(efreet_merged_menus, realpath))
return 1;
- ecore_hash_set(efreet_merged_menus, strdup(realpath), (void *)1);
+ eina_hash_add(efreet_merged_menus, realpath, (void *)1);
merge_xml = efreet_xml_new(realpath);
FREE(realpath);
if (!parent || !xml || !path) return 0;
/* check to see if we've merged this directory already */
- if (ecore_hash_get(efreet_merged_dirs, path)) return 1;
- ecore_hash_set(efreet_merged_dirs, strdup(path), (void *)1);
+ if (eina_hash_find(efreet_merged_dirs, path)) return 1;
+ eina_hash_add(efreet_merged_dirs, path, (void *)1);
files = opendir(path);
if (!files) return 1;
{
int (*cb)(Efreet_Menu_Internal *parent, Efreet_Xml *xml);
- cb = ecore_hash_get(efreet_menu_move_cbs, child->tag);
+ cb = eina_hash_find(efreet_menu_move_cbs, child->tag);
if (cb)
{
if (!cb(parent, child))
{
int (*cb)(Efreet_Menu_Internal *parent, Efreet_Xml *xml, int def);
- cb = ecore_hash_get(efreet_menu_layout_cbs, child->tag);
+ cb = eina_hash_find(efreet_menu_layout_cbs, child->tag);
if (cb)
{
if (!cb(parent, child, 0))
{
int (*cb)(Efreet_Menu_Internal *parent, Efreet_Xml *xml, int def);
- cb = ecore_hash_get(efreet_menu_layout_cbs, child->tag);
+ cb = eina_hash_find(efreet_menu_layout_cbs, child->tag);
if (cb)
{
if (!cb(parent, child, 1))
{
int (*cb)(Efreet_Menu_Filter_Op *op, Efreet_Xml *xml);
- cb = ecore_hash_get(efreet_menu_filter_cbs, child->tag);
+ cb = eina_hash_find(efreet_menu_filter_cbs, child->tag);
if (cb)
{
if (!cb(op, child))
if (filter->type == EFREET_MENU_FILTER_INCLUDE)
{
- Ecore_Hash *matches;
+ Eina_Hash *matches;
- matches = ecore_hash_new(ecore_str_hash, ecore_str_compare);
+ matches = eina_hash_string_superfast_new(NULL);
efreet_menu_process_app_pool(internal->app_pool, internal->applications,
matches, filter, internal->only_unallocated);
if (internal->parent)
internal->only_unallocated);
} while ((parent = parent->parent));
}
- ecore_hash_destroy(matches);
+ eina_hash_free(matches);
}
else
{
*/
static
void efreet_menu_process_app_pool(Ecore_List *pool, Ecore_List *applications,
- Ecore_Hash *matches,
- Efreet_Menu_Filter *filter,
- unsigned int only_unallocated)
+ Eina_Hash *matches,
+ Efreet_Menu_Filter *filter,
+ unsigned int only_unallocated)
{
Efreet_Menu_Desktop *md;
ecore_list_first_goto(pool);
while ((md = ecore_list_next(pool)))
{
- if (ecore_hash_get(matches, md->id)) continue;
+ if (eina_hash_find(matches, md->id)) continue;
if (only_unallocated && md->allocated) continue;
if (efreet_menu_filter_matches(filter->op, md))
{
ecore_list_append(applications, md);
- ecore_hash_set(matches, (void *)md->id, md);
+ eina_hash_add(matches, (void *)md->id, md);
md->allocated = 1;
}
}
if (internal->directory_dirs)
{
- internal->directory_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(internal->directory_cache, ECORE_FREE_CB(free));
- ecore_hash_free_value_cb_set(internal->directory_cache, ECORE_FREE_CB(efreet_desktop_free));
+ internal->directory_cache =
+ eina_hash_string_superfast_new(EINA_FREE_CB(efreet_desktop_free));
ecore_dlist_last_goto(internal->directory_dirs);
while ((path = ecore_dlist_previous(internal->directory_dirs)))
*/
static int
efreet_menu_directory_dir_scan(const char *path, const char *relative_path,
- Ecore_Hash *cache)
+ Eina_Hash *cache)
{
Efreet_Desktop *desktop;
DIR *files;
continue;
}
- ecore_hash_set(cache, (void *)strdup(buf2), desktop);
+ eina_hash_del(cache, buf2, NULL);
+ eina_hash_add(cache, buf2, desktop);
}
}
closedir(files);
if (internal->directory_cache)
{
- dir = ecore_hash_get(internal->directory_cache, path);
+ dir = eina_hash_find(internal->directory_cache, path);
if (dir) return dir;
}
static Ecore_List *globs = NULL; /* contains Efreet_Mime_Glob structs */
static Ecore_List *magics = NULL; /* contains Efreet_Mime_Magic structs */
-static Ecore_Hash *wild = NULL; /* contains *.ext and mime.types globs*/
-static Ecore_Hash *monitors = NULL; /* contains file monitors */
+static Eina_Hash *wild = NULL; /* contains *.ext and mime.types globs*/
+static Eina_Hash *monitors = NULL; /* contains file monitors */
/**
* @internal
efreet_mime_endianess = efreet_mime_endian_check();
- monitors = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(monitors, ECORE_FREE_CB(free));
- ecore_hash_free_value_cb_set(monitors,
- ECORE_FREE_CB(ecore_file_monitor_del));
+ monitors = eina_hash_string_superfast_new(EINA_FREE_CB(ecore_file_monitor_del));
if (!efreet_mime_init_files())
return 0;
while (p)
{
p++;
- if (p && (mime = ecore_hash_get(wild, p))) return mime;
+ if (p && (mime = eina_hash_find(wild, p))) return mime;
p = strchr(p, '.');
}
}
/* if this is already in our hash then we're already monitoring so no
* reason to re-monitor */
- if (ecore_hash_get(monitors, file))
+ if (eina_hash_find(monitors, file))
return;
if ((fm = ecore_file_monitor_add(file, efreet_mime_cb_update_file, NULL)))
- ecore_hash_set(monitors, strdup(file), fm);
+ {
+ eina_hash_del(monitors, file, NULL);
+ eina_hash_add(monitors, file, fm);
+ }
}
/**
const char *datadir = NULL;
IF_FREE_HASH(wild);
- wild = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(wild, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(wild,
- ECORE_FREE_CB(eina_stringshare_del));
+ wild = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
IF_FREE_LIST(globs);
globs = ecore_list_new();
ecore_list_free_cb_set(globs, efreet_mime_glob_free);
strncpy(ext, pp, (p - pp));
ext[p - pp] = 0;
- ecore_hash_set(wild, (void*)eina_stringshare_add(ext),
- (void*)eina_stringshare_add(mimetype));
+ eina_hash_del(wild, ext, NULL);
+ eina_hash_add(wild, ext, (void*)eina_stringshare_add(mimetype));
}
while ((*p != '\n') && (*p != 0));
}
if (ext[0] == '*' && ext[1] == '.')
{
- ecore_hash_set(wild, (void*)eina_stringshare_add(&(ext[2])),
- (void*)eina_stringshare_add(mimetype));
+ eina_hash_del(wild, &(ext[2]), NULL);
+ eina_hash_add(wild, &(ext[2]),
+ (void*)eina_stringshare_add(mimetype));
}
else
{
*/
#define IF_FREE_HASH(x) do { \
if (x) { \
- Ecore_Hash *__tmp; __tmp = (x); (x) = NULL; ecore_hash_destroy(__tmp); \
+ Eina_Hash *__tmp; __tmp = (x); (x) = NULL; eina_hash_free(__tmp); \
} \
(x) = NULL; \
} while (0)
struct Efreet_Cache_Search
{
+ Efreet_Util_Desktop *result;
const char *what1;
const char *what2;
};
static void efreet_util_cache_reload(const char *path, const char *file_id, int priority);
static void efreet_util_cache_dir_free(void *data);
-static void efreet_util_cache_search_mime(void *value, void *data);
-static int efreet_util_cache_search_wm_class(const void *value, const void *data);
-static int efreet_util_cache_search_exec(const void *value, const void *data);
-static int efreet_util_cache_search_name(const void *value, const void *data);
-static int efreet_util_cache_search_generic_name(const void *value, const void *data);
+static Eina_Bool efreet_util_cache_search_mime(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_wm_class(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_exec(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_name(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_generic_name(const Eina_Hash *hash, void *value, void *fdata);
-static void efreet_util_cache_search_name_glob(void *value, void *data);
-static void efreet_util_cache_search_exec_glob(void *value, void *data);
-static void efreet_util_cache_search_generic_name_glob(void *value, void *data);
-static void efreet_util_cache_search_comment_glob(void *value, void *data);
+static Eina_Bool efreet_util_cache_search_name_glob(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_exec_glob(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_generic_name_glob(const Eina_Hash *hash, void *value, void *fdata);
+static Eina_Bool efreet_util_cache_search_comment_glob(const Eina_Hash *hash, void *value, void *fdata);
static int efreet_util_glob_match(const char *str, const char *glob);
static void efreet_util_desktop_free(Efreet_Util_Desktop *ud);
static void efreet_event_desktop_change_free(void *data, void *ev);
-static Ecore_Hash *desktop_by_file_id = NULL;
-static Ecore_Hash *file_id_by_desktop_path = NULL;
-static Ecore_Hash *desktops_by_category = NULL;
+static Eina_Hash *desktop_by_file_id = NULL;
+static Eina_Hash *file_id_by_desktop_path = NULL;
+static Eina_Hash *desktops_by_category = NULL;
static Ecore_Idler *idler = NULL;
static Efreet_Cache_Fill *fill = NULL;
EFREET_EVENT_DESKTOP_LIST_CHANGE = ecore_event_type_new();
if (!EFREET_EVENT_DESKTOP_CHANGE)
EFREET_EVENT_DESKTOP_CHANGE = ecore_event_type_new();
- desktop_by_file_id = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(desktop_by_file_id, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(desktop_by_file_id, ECORE_FREE_CB(efreet_util_desktop_free));
-
- file_id_by_desktop_path = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(file_id_by_desktop_path, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(file_id_by_desktop_path, ECORE_FREE_CB(eina_stringshare_del));
-
- desktops_by_category = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- ecore_hash_free_key_cb_set(desktops_by_category, ECORE_FREE_CB(eina_stringshare_del));
- ecore_hash_free_value_cb_set(desktops_by_category, ECORE_FREE_CB(ecore_list_destroy));
+ desktop_by_file_id = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_util_desktop_free));
+ file_id_by_desktop_path = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
+ desktops_by_category = eina_hash_string_superfast_new(EINA_FREE_CB(ecore_list_destroy));
monitors = ecore_list_new();
ecore_list_free_cb_set(monitors, efreet_util_monitor_free);
const char *file_id = NULL;
if (!path) return NULL;
- file_id = ecore_hash_get(file_id_by_desktop_path, path);
+ file_id = eina_hash_find(file_id_by_desktop_path, path);
if (file_id) return file_id;
base = efreet_util_path_in_default("applications", path);
free(base);
file_id = eina_stringshare_add(tmp);
free(tmp);
- ecore_hash_set(file_id_by_desktop_path, (void *)eina_stringshare_add(path),
- (void *)file_id);
+ eina_hash_del(file_id_by_desktop_path, path, NULL);
+ eina_hash_add(file_id_by_desktop_path, path, (void *)file_id);
return file_id;
}
efreet_util_desktop_mime_list(const char *mime)
{
Efreet_Cache_Search_List search;
+ Eina_Iterator *it;
search.list = ecore_list_new();
search.what = eina_stringshare_add(mime);
- ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_mime, &search);
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_mime), &search);
+ eina_iterator_free(it);
+
eina_stringshare_del(search.what);
if (ecore_list_empty_is(search.list)) IF_FREE_LIST(search.list);
{
Efreet_Cache_Search search;
Efreet_Util_Desktop *ud;
+ Eina_Iterator *it;
if ((!wmname) && (!wmclass)) return NULL;
search.what1 = wmname;
search.what2 = wmclass;
- ud = ecore_hash_find(desktop_by_file_id, efreet_util_cache_search_wm_class, &search);
+ search.result = NULL;
+
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_wm_class), &search);
+ eina_iterator_free(it);
+ ud = search.result;
+
if (ud) return ud->desktop;
return NULL;
}
int priority = 0;
if (!file_id) return NULL;
- ud = ecore_hash_get(desktop_by_file_id, file_id);
+ ud = eina_hash_find(desktop_by_file_id, file_id);
if (ud) return ud->desktop;
dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(),
ud->priority = priority;
ud->desktop = desktop;
- ecore_hash_set(desktop_by_file_id, (void *)eina_stringshare_add(file_id), ud);
+ eina_hash_del(desktop_by_file_id, file_id, NULL);
+ eina_hash_add(desktop_by_file_id, file_id, ud);
efreet_util_desktops_by_category_add(desktop);
ev = NEW(Efreet_Event_Desktop_Change, 1);
efreet_util_desktop_exec_find(const char *exec)
{
Efreet_Cache_Search search;
- Efreet_Util_Desktop *ud;
+ Eina_Iterator *it;
if (!exec) return NULL;
search.what1 = exec;
search.what2 = NULL;
- ud = ecore_hash_find(desktop_by_file_id, efreet_util_cache_search_exec, &search);
- if (ud) return ud->desktop;
+ search.result = NULL;
+
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_exec), &search);
+ eina_iterator_free(it);
+
+ if (search.result) return search.result->desktop;
return NULL;
}
efreet_util_desktop_name_find(const char *name)
{
Efreet_Cache_Search search;
- Efreet_Util_Desktop *ud;
+ Eina_Iterator *it;
if (!name) return NULL;
search.what1 = name;
search.what2 = NULL;
- ud = ecore_hash_find(desktop_by_file_id, efreet_util_cache_search_name, &search);
- if (ud) return ud->desktop;
+ search.result = NULL;
+
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_name), &search);
+ eina_iterator_free(it);
+
+ if (search.result) return search.result->desktop;
return NULL;
}
efreet_util_desktop_generic_name_find(const char *generic_name)
{
Efreet_Cache_Search search;
- Efreet_Util_Desktop *ud;
+ Eina_Iterator *it;
if (!generic_name) return NULL;
search.what1 = generic_name;
search.what2 = NULL;
- ud = ecore_hash_find(desktop_by_file_id, efreet_util_cache_search_generic_name, &search);
- if (ud) return ud->desktop;
+ search.result = NULL;
+
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_generic_name), &search);
+ eina_iterator_free(it);
+
+ if (search.result) return search.result->desktop;
return NULL;
}
efreet_util_desktop_name_glob_list(const char *glob)
{
Efreet_Cache_Search_List search;
+ Eina_Iterator *it;
search.list = ecore_list_new();
search.what = glob;
- ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_name_glob, &search);
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_name_glob), &search);
+ eina_iterator_free(it);
if (ecore_list_empty_is(search.list)) IF_FREE_LIST(search.list);
return search.list;
efreet_util_desktop_exec_glob_list(const char *glob)
{
Efreet_Cache_Search_List search;
+ Eina_Iterator *it;
search.list = ecore_list_new();
search.what = glob;
- ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_exec_glob, &search);
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_exec_glob), &search);
+ eina_iterator_free(it);
if (ecore_list_empty_is(search.list)) IF_FREE_LIST(search.list);
return search.list;
efreet_util_desktop_generic_name_glob_list(const char *glob)
{
Efreet_Cache_Search_List search;
+ Eina_Iterator *it;
search.list = ecore_list_new();
search.what = glob;
- ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_generic_name_glob, &search);
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_generic_name_glob), &search);
+ eina_iterator_free(it);
if (ecore_list_empty_is(search.list)) IF_FREE_LIST(search.list);
return search.list;
efreet_util_desktop_comment_glob_list(const char *glob)
{
Efreet_Cache_Search_List search;
+ Eina_Iterator *it;
search.list = ecore_list_new();
search.what = glob;
- ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_comment_glob, &search);
+ it = eina_hash_iterator_data_new(desktop_by_file_id);
+ eina_iterator_foreach(it, EINA_EACH(efreet_util_cache_search_comment_glob), &search);
+ eina_iterator_free(it);
if (ecore_list_empty_is(search.list)) IF_FREE_LIST(search.list);
return search.list;
EAPI Ecore_List *
efreet_util_desktop_categories_list(void)
{
- return ecore_hash_keys(desktops_by_category);
+ Eina_Iterator *it;
+ Ecore_List *list;
+
+ list = ecore_list_new();
+ if (list)
+ {
+ it = eina_hash_iterator_key_new(desktops_by_category);
+ eina_iterator_foreach(it, EINA_EACH(desktops_by_category), list);
+ eina_iterator_free(it);
+ }
+
+ return list;
}
/**
EAPI Ecore_List *
efreet_util_desktop_category_list(const char *category)
{
- return ecore_hash_get(desktops_by_category, category);
+ return eina_hash_find(desktops_by_category, category);
}
#if 0
-static void
-dump(void *value, void *data __UNUSED__)
+static Eina_Bool
+dump(Eina_Hash *hash, const char *key, void *value, __UNUSED__ void *data)
{
- Ecore_Hash_Node *node;
- node = value;
- printf("%s -> %p\n", (char *)node->key, node->value);
+ printf("%s -> %p\n", (char *)key, value);
}
#endif
static int
-efreet_util_cache_fill(void *data __UNUSED__)
+efreet_util_cache_fill(__UNUSED__ void *data)
{
struct dirent *file = NULL;
double start;
idler = NULL;
fill = NULL;
#if 0
- ecore_hash_for_each_node(desktop_by_file_id, dump, NULL);
- ecore_hash_for_each_node(file_id_by_desktop_path, dump, NULL);
- printf("%d\n", ecore_hash_count(desktop_by_file_id));
+ eina_hash_foreach(desktop_by_file_id, dump, NULL);
+ eina_hash_foreach(file_id_by_desktop_path, dump, NULL);
+ printf("%d\n", eina_hash_population(desktop_by_file_id));
#endif
ecore_event_add(EFREET_EVENT_DESKTOP_LIST_CHANGE, NULL, NULL, NULL);
return;
}
- if (!ecore_hash_get(file_id_by_desktop_path, desktop->orig_path))
- ecore_hash_set(file_id_by_desktop_path,
- (void *)eina_stringshare_add(desktop->orig_path),
- (void *)eina_stringshare_add(file_id));
+ if (!eina_hash_find(file_id_by_desktop_path, desktop->orig_path))
+ {
+ eina_hash_add(file_id_by_desktop_path,
+ desktop->orig_path,
+ (void *)eina_stringshare_add(file_id));
- ud = ecore_hash_get(desktop_by_file_id, file_id);
+ }
+
+ ud = eina_hash_find(desktop_by_file_id, file_id);
if (!ud)
{
ud = NEW(Efreet_Util_Desktop, 1);
ud->priority = priority;
ud->desktop = desktop;
- ecore_hash_set(desktop_by_file_id, (void *)eina_stringshare_add(file_id), ud);
+ eina_hash_add(desktop_by_file_id, file_id, ud);
efreet_util_desktops_by_category_add(desktop);
if (event)
ext = strrchr(path, '.');
if (!ext || strcmp(ext, ".desktop")) return;
- ud = ecore_hash_get(desktop_by_file_id, file_id);
+ ud = eina_hash_find(desktop_by_file_id, file_id);
if (ud && (ud->priority >= priority))
{
Efreet_Event_Desktop_Change *ev;
- ecore_hash_remove(desktop_by_file_id, file_id);
efreet_util_desktops_by_category_remove(ud->desktop);
ev = NEW(Efreet_Event_Desktop_Change, 1);
ev->change = EFREET_DESKTOP_CHANGE_REMOVE;
ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, efreet_event_desktop_change_free, NULL);
- efreet_util_desktop_free(ud);
+ eina_hash_del(desktop_by_file_id, file_id, ud);
/* This call will search application dirs and add the file to cache if it
* exists. */
efreet_util_desktop_file_id_find(file_id);
}
- ecore_hash_remove(file_id_by_desktop_path, path);
+ eina_hash_del(file_id_by_desktop_path, path, eina_hash_find(file_id_by_desktop_path, path));
}
static void
return;
}
- ud = ecore_hash_get(desktop_by_file_id, file_id);
+ ud = eina_hash_find(desktop_by_file_id, file_id);
if (ud)
{
Efreet_Event_Desktop_Change *ev;
ud->priority = priority;
ud->desktop = desktop;
- ecore_hash_set(desktop_by_file_id, (void *)eina_stringshare_add(file_id), ud);
+ eina_hash_add(desktop_by_file_id, file_id, ud);
efreet_util_desktops_by_category_remove(ud->desktop);
efreet_util_desktops_by_category_add(desktop);
free(dir);
}
-static void
-efreet_util_cache_search_mime(void *value, void *data)
+static Eina_Bool
+efreet_util_cache_search_mime(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- Ecore_Hash_Node *node;
Efreet_Cache_Search_List *search;
Efreet_Util_Desktop *ud;
const char *mime;
- node = value;
- search = data;
- ud = node->value;
+ search = fdata;
+ ud = value;
- if (!ud->desktop->mime_types) return;
+ if (!ud->desktop->mime_types) return EINA_FALSE;
ecore_list_first_goto(ud->desktop->mime_types);
while ((mime = ecore_list_next(ud->desktop->mime_types)))
{
break;
}
}
+ return EINA_TRUE;
}
-static int
-efreet_util_cache_search_wm_class(const void *value, const void *data)
+static Eina_Bool
+efreet_util_cache_search_wm_class(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- const Efreet_Cache_Search *search;
- const Efreet_Util_Desktop *ud;
+ Efreet_Cache_Search *search;
+ Efreet_Util_Desktop *ud;
ud = value;
- search = data;
+ search = fdata;
- if (!ud->desktop->startup_wm_class) return 1;
+ if (!ud->desktop->startup_wm_class) return EINA_TRUE;
if ((search->what2) && (!strcmp(ud->desktop->startup_wm_class, search->what2)))
- return 0;
+ {
+ search->result = ud;
+ return EINA_FALSE;
+ }
else if ((search->what1) && (!strcmp(ud->desktop->startup_wm_class, search->what1)))
- return 0;
- return 1;
+ {
+ search->result = ud;
+ return EINA_FALSE;
+ }
+ return EINA_TRUE;
}
-static int
-efreet_util_cache_search_exec(const void *value, const void *data)
+static Eina_Bool
+efreet_util_cache_search_exec(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- const Efreet_Cache_Search *search;
- const Efreet_Util_Desktop *ud;
+ Efreet_Cache_Search *search;
+ Efreet_Util_Desktop *ud;
char *exec;
const char *file;
ud = value;
- search = data;
+ search = fdata;
- if (!ud->desktop->exec) return 1;
+ if (!ud->desktop->exec) return EINA_TRUE;
exec = ecore_file_app_exe_get(ud->desktop->exec);
- if (!exec) return 1;
+ if (!exec) return EINA_TRUE;
if (!strcmp(exec, search->what1))
{
free(exec);
- return 0;
+ search->result = ud;
+ return EINA_FALSE;
}
file = ecore_file_file_get(exec);
if (file && !strcmp(file, search->what1))
{
free(exec);
- return 0;
+ search->result = ud;
+ return EINA_FALSE;
}
free(exec);
- return 1;
+ return EINA_TRUE;
}
-static int
-efreet_util_cache_search_name(const void *value, const void *data)
+static Eina_Bool
+efreet_util_cache_search_name(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- const Efreet_Cache_Search *search;
- const Efreet_Util_Desktop *ud;
+ Efreet_Cache_Search *search;
+ Efreet_Util_Desktop *ud;
ud = value;
- search = data;
-
- if (!ud->desktop->name) return 1;
- return strcmp(ud->desktop->name, search->what1);
+ search = fdata;
+
+ if (!ud->desktop->name) return EINA_TRUE;
+ if (!strcmp(ud->desktop->name, search->what1))
+ {
+ search->result = ud;
+ return EINA_FALSE;
+ }
+ return EINA_TRUE;
}
-static int
-efreet_util_cache_search_generic_name(const void *value, const void *data)
+static Eina_Bool
+efreet_util_cache_search_generic_name(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- const Efreet_Cache_Search *search;
- const Efreet_Util_Desktop *ud;
+ Efreet_Cache_Search *search;
+ Efreet_Util_Desktop *ud;
ud = value;
- search = data;
-
- if (!ud->desktop->generic_name) return 1;
- return strcmp(ud->desktop->generic_name, search->what1);
+ search = fdata;
+
+ if (!ud->desktop->generic_name) return EINA_TRUE;
+ if (!strcmp(ud->desktop->generic_name, search->what1))
+ {
+ search->result = ud;
+ return EINA_FALSE;
+ }
+ return EINA_TRUE;
}
-static void
-efreet_util_cache_search_name_glob(void *value, void *data)
+static Eina_Bool
+efreet_util_cache_search_name_glob(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- Ecore_Hash_Node *node;
Efreet_Cache_Search_List *search;
Efreet_Util_Desktop *ud;
- node = value;
- search = data;
- ud = node->value;
+ search = fdata;
+ ud = value;
if (efreet_util_glob_match(ud->desktop->name, search->what))
ecore_list_append(search->list, ud->desktop);
+ return EINA_TRUE;
}
-static void
-efreet_util_cache_search_exec_glob(void *value, void *data)
+static Eina_Bool
+efreet_util_cache_search_exec_glob(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- Ecore_Hash_Node *node;
Efreet_Cache_Search_List *search;
Efreet_Util_Desktop *ud;
char *exec;
- node = value;
- search = data;
- ud = node->value;
+ search = fdata;
+ ud = value;
- if (!ud->desktop->exec) return;
+ if (!ud->desktop->exec) return EINA_FALSE;
exec = ecore_file_app_exe_get(ud->desktop->exec);
if (exec)
{
ecore_list_append(search->list, ud->desktop);
free(exec);
}
+ return EINA_TRUE;
}
-static void
-efreet_util_cache_search_generic_name_glob(void *value, void *data)
+static Eina_Bool
+efreet_util_cache_search_generic_name_glob(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- Ecore_Hash_Node *node;
Efreet_Cache_Search_List *search;
Efreet_Util_Desktop *ud;
- node = value;
- search = data;
- ud = node->value;
+ search = fdata;
+ ud = value;
if (efreet_util_glob_match(ud->desktop->generic_name, search->what))
ecore_list_append(search->list, ud->desktop);
+ return EINA_TRUE;
}
-static void
-efreet_util_cache_search_comment_glob(void *value, void *data)
+static Eina_Bool
+efreet_util_cache_search_comment_glob(__UNUSED__ const Eina_Hash *hash, void *value, void *fdata)
{
- Ecore_Hash_Node *node;
Efreet_Cache_Search_List *search;
Efreet_Util_Desktop *ud;
- node = value;
- search = data;
- ud = node->value;
+ search = fdata;
+ ud = value;
if (efreet_util_glob_match(ud->desktop->comment, search->what))
ecore_list_append(search->list, ud->desktop);
+ return EINA_TRUE;
}
static int
while ((category = ecore_list_next(desktop->categories)))
{
Ecore_List *list;
- list = ecore_hash_get(desktops_by_category, category);
+ list = eina_hash_find(desktops_by_category, category);
if (!list)
{
list = ecore_list_new();
- ecore_hash_set(desktops_by_category,
- (void *)eina_stringshare_add(category), list);
+ eina_hash_add(desktops_by_category, category, list);
}
if (!ecore_list_goto(list, desktop))
ecore_list_append(list, desktop);
while ((category = ecore_list_next(desktop->categories)))
{
Ecore_List *list;
- list = ecore_hash_get(desktops_by_category, category);
+ list = eina_hash_find(desktops_by_category, category);
if (!list) continue;
if (ecore_list_goto(list, desktop))
ecore_list_remove(list);
if (ecore_list_empty_is(list))
- {
- ecore_hash_remove(desktops_by_category, category);
- ecore_list_destroy(list);
- }
+ eina_hash_del(desktops_by_category, category, list);
}
}