Remove ecore_hash and eina_hash use from ecore.

SVN revision: 38105
This commit is contained in:
Cedric BAIL 2008-12-11 13:55:47 +00:00
parent db11d16b7f
commit 642d8686de
20 changed files with 473 additions and 384 deletions

View File

@ -24,6 +24,10 @@
static Ecore_List *loaded_plugins = NULL;
static Eina_Bool _hash_keys(const Eina_Hash *hash,
const char *key,
void *list);
/**
* @defgroup Ecore_Plugin Plugin Functions
*
@ -163,7 +167,8 @@ EAPI Ecore_List *
ecore_plugin_available_get(Ecore_Path_Group *group)
{
Ecore_List *avail = NULL;
Ecore_Hash *plugins = NULL;
Eina_Hash *plugins = NULL;
Eina_Iterator *it = NULL;
char *path;
CHECK_PARAM_POINTER_RETURN("group", group, NULL);
@ -172,8 +177,7 @@ ecore_plugin_available_get(Ecore_Path_Group *group)
return NULL;
ecore_list_first_goto(group->paths);
plugins = ecore_hash_new(ecore_str_hash, ecore_str_compare);
ecore_hash_free_key_cb_set(plugins, free);
plugins = eina_hash_string_superfast_new(free);
while ((path = ecore_list_next(group->paths)) != NULL)
{
@ -214,21 +218,37 @@ ecore_plugin_available_get(Ecore_Path_Group *group)
ext = strrchr(ppath, '.');
*ext = '\0';
if (!ecore_hash_get(plugins, ppath))
if (!eina_hash_find(plugins, ppath))
{
char *key;
key = strdup(ppath);
ecore_hash_set(plugins, key, key);
eina_hash_add(plugins, key, key);
}
}
closedir(dir);
}
ecore_hash_free_key_cb_set(plugins, NULL);
avail = ecore_hash_keys(plugins);
avail = ecore_list_new();
ecore_list_free_cb_set(avail, free);
ecore_hash_destroy(plugins);
it = eina_hash_iterator_key_new(plugins);
if (it)
{
eina_iterator_foreach(it, EINA_EACH(_hash_keys), avail);
eina_iterator_free(it);
}
eina_hash_free(plugins);
return avail;
}
static Eina_Bool
_hash_keys(const Eina_Hash *hash, const char *key, void *list)
{
ecore_list_append(list, key);
return EINA_TRUE;
}

View File

@ -188,7 +188,7 @@ extern "C" {
EAPI void *ecore_con_server_del(Ecore_Con_Server *svr);
EAPI void *ecore_con_server_data_get(Ecore_Con_Server *svr);
EAPI int ecore_con_server_connected_get(Ecore_Con_Server *svr);
EAPI Ecore_List *ecore_con_server_clients_get(Ecore_Con_Server *svr);
EAPI Eina_List *ecore_con_server_clients_get(Ecore_Con_Server *svr);
EAPI int ecore_con_server_send(Ecore_Con_Server *svr, const void *data, int size);
EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr, int client_limit, char reject_excess_clients);
EAPI char *ecore_con_server_ip_get(Ecore_Con_Server *svr);

View File

@ -178,7 +178,7 @@ ecore_con_server_add(Ecore_Con_Type compl_type, const char *name, int port,
svr->created = 1;
svr->reject_excess_clients = 0;
svr->client_limit = -1;
svr->clients = ecore_list_new();
svr->clients = NULL;
svr->ppid = getpid();
ecore_con_ssl_server_prepare(svr);
@ -351,8 +351,8 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, const char *name, int port,
svr->data = (void *)data;
svr->created = 0;
svr->reject_excess_clients = 0;
svr->clients = NULL;
svr->client_limit = -1;
svr->clients = ecore_list_new();
ecore_con_ssl_server_prepare(svr);
type = compl_type & ECORE_CON_TYPE;
@ -551,7 +551,7 @@ ecore_con_server_connected_get(Ecore_Con_Server *svr)
* @return The list of clients on this server.
* @ingroup Ecore_Con_Server_Group
*/
EAPI Ecore_List *
EAPI Eina_List *
ecore_con_server_clients_get(Ecore_Con_Server *svr)
{
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER))
@ -782,8 +782,7 @@ ecore_con_client_del(Ecore_Con_Client *cl)
}
else
{
if (ecore_list_goto(cl->server->clients, cl))
ecore_list_remove(cl->server->clients);
cl->server->clients = eina_list_remove(cl->server->clients, cl);
_ecore_con_client_free(cl);
}
return data;
@ -864,6 +863,7 @@ ecore_con_client_flush(Ecore_Con_Client *cl)
static void
_ecore_con_server_free(Ecore_Con_Server *svr)
{
Ecore_Con_Client *cl;
double t_start, t;
ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE);
@ -882,9 +882,12 @@ _ecore_con_server_free(Ecore_Con_Server *svr)
}
}
if (svr->write_buf) free(svr->write_buf);
while (!ecore_list_empty_is(svr->clients))
_ecore_con_client_free(ecore_list_first_remove(svr->clients));
ecore_list_destroy(svr->clients);
while (svr->clients)
{
cl = eina_list_data_get(svr->clients);
svr->clients = eina_list_remove(svr->clients, cl);
_ecore_con_client_free(cl);
}
if ((svr->created) && (svr->path) && (svr->ppid == getpid()))
unlink(svr->path);
if (svr->fd >= 0) close(svr->fd);
@ -1181,7 +1184,7 @@ _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__)
if (svr->delete_me) return 1;
if ((svr->client_limit >= 0) && (!svr->reject_excess_clients))
{
if (ecore_list_count(svr->clients) >= svr->client_limit) return 1;
if (eina_list_count(svr->clients) >= svr->client_limit) return 1;
}
/* a new client */
size_in = sizeof(struct sockaddr_in);
@ -1223,7 +1226,7 @@ _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__)
ecore_main_fd_handler_add(cl->fd, ECORE_FD_READ,
_ecore_con_svr_cl_handler, cl, NULL, NULL);
ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT);
ecore_list_append(svr->clients, cl);
eina_list_append(svr->clients, cl);
if (!svr->path)
{
ip = incoming.sin_addr.s_addr;
@ -1422,7 +1425,7 @@ _ecore_con_svr_udp_handler(void *data, Ecore_Fd_Handler *fd_handler)
}
memcpy(cl->data, &client_addr, sizeof(client_addr));
ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT);
ecore_list_append(svr->clients, cl);
eina_list_append(svr->clients, cl);
ip = client_addr.sin_addr.s_addr;
snprintf(ipbuf, sizeof(ipbuf),

View File

@ -72,7 +72,7 @@ struct _Ecore_Con_Server
char *path;
void *data;
Ecore_Fd_Handler *fd_handler;
Ecore_List *clients;
Eina_List *clients;
int write_buf_size;
int write_buf_offset;
unsigned char *write_buf;

View File

@ -34,7 +34,7 @@ struct _Ecore_Desktop
* space and cycles that just covers up bugs. On the other hand, it makes
* for a more robust library, and it's used everywhere else in ecore.
*/
Ecore_Hash *data, *group, *Categories, *OnlyShowIn, *NotShowIn, *MimeTypes, *Actions;
Eina_Hash *data, *group, *Categories, *OnlyShowIn, *NotShowIn, *MimeTypes, *Actions;
char *original_path;
char *original_lang;
char *eap_name;
@ -72,7 +72,7 @@ typedef struct _Ecore_Desktop Ecore_Desktop;
struct _Ecore_Desktop_Icon_Theme
{
Ecore_Hash *data, *group;
Eina_Hash *data, *group;
Ecore_List *Inherits;
Ecore_List *Directories;
char *path;
@ -92,7 +92,7 @@ typedef struct _Ecore_Desktop_Icon_Theme Ecore_Desktop_Icon_Theme;
struct _Ecore_Desktop_Icon_Theme_Directory
{
Ecore_Hash *icons;
Eina_Hash *icons;
char *path;
char *full_path;
char *type;
@ -201,12 +201,12 @@ extern "C"
void *data);
EAPI int ecore_desktop_paths_shutdown(void);
Ecore_Hash *ecore_desktop_paths_to_hash(const char *paths);
Eina_Hash *ecore_desktop_paths_to_hash(const char *paths);
Ecore_List *ecore_desktop_paths_to_list(const char *paths);
EAPI int ecore_desktop_init(void);
EAPI int ecore_desktop_shutdown(void);
Ecore_Hash *ecore_desktop_ini_get(const char *file);
Eina_Hash *ecore_desktop_ini_get(const char *file);
Ecore_Desktop *ecore_desktop_get(const char *file, const char *lang);
void ecore_desktop_save(Ecore_Desktop * desktop);
EAPI Ecore_List *ecore_desktop_get_command(Ecore_Desktop * desktop,
@ -220,7 +220,7 @@ extern "C"
const char *icon_size,
const char *icon_theme);
Ecore_Hash *ecore_desktop_icon_theme_list(void);
Eina_Hash *ecore_desktop_icon_theme_list(void);
Ecore_Desktop_Icon_Theme *ecore_desktop_icon_theme_get(const char *file,
const char *lang);
void ecore_desktop_icon_theme_destroy(Ecore_Desktop_Icon_Theme
@ -228,7 +228,7 @@ extern "C"
EAPI void
ecore_desktop_menu_for_each(void (*func)
(const char *name, const char *path, const char *directory, Ecore_Hash * apps));
(const char *name, const char *path, const char *directory, Eina_Hash * apps));
Ecore_Desktop_Tree *ecore_desktop_menu_get(char *file);
Ecore_Desktop_Tree *ecore_desktop_tree_new(char *buffer);
@ -249,7 +249,7 @@ extern "C"
Ecore_Desktop_Tree *
element);
Ecore_Desktop_Tree *ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree,
Ecore_Hash * element);
Eina_Hash * element);
void ecore_desktop_tree_remove(Ecore_Desktop_Tree * tree,
int element);
int ecore_desktop_tree_exist(Ecore_Desktop_Tree * tree,

View File

@ -14,12 +14,12 @@ extern int reject_count, not_over_count;
static int init_count = 0;
static Ecore_Hash *desktop_cache;
static Eina_Hash *desktop_cache = NULL;
Ecore_Desktop *_ecore_desktop_get(const char *file, const char *lang);
void _ecore_desktop_destroy(Ecore_Desktop * desktop);
#define IFGETDUP(src, key, dst) src = (char *)ecore_hash_get(result->group, key); if (src) dst = strdup(src); else dst = NULL;
#define IFGETDUP(src, key, dst) src = (char *)eina_hash_find(result->group, key); if (src) dst = strdup(src); else dst = NULL;
#define IFFREE(src) if (src) free(src); src = NULL;
/**
@ -33,35 +33,33 @@ void _ecore_desktop_destroy(Ecore_Desktop * desktop);
/**
* Get the contents of a .ini style file.
*
* The Ecore_Hash returned is a two level hash, the first level
* The Eina_Hash returned is a two level hash, the first level
* is the groups in the file, one per group, keyed by the name
* of that group. The value of each of those first level hashes
* is the second level Ecore_Hash, the contents of each group.
* is the second level Eina_Hash, the contents of each group.
*
* @param file Full path to the .ini style file.
* @return An Ecore_Hash of the files contents.
* @return An Eina_Hash of the files contents.
* @ingroup Ecore_Desktop_Main_Group
*/
Ecore_Hash *
Eina_Hash *
ecore_desktop_ini_get(const char *file)
{
Ecore_Hash *result;
Eina_Hash *result;
FILE *f;
char buffer[PATH_MAX];
Ecore_Hash *current = NULL;
Eina_Hash *current = NULL;
result = ecore_hash_new(ecore_str_hash, ecore_str_compare);
result = eina_hash_string_superfast_new(eina_hash_free);
if (!result) return NULL;
f = fopen(file, "r");
if (!f)
{
fprintf(stderr, "ERROR: Cannot Open File %s\n", file);
ecore_hash_destroy(result);
eina_hash_free(result);
return NULL;
}
ecore_hash_free_key_cb_set(result, free);
ecore_hash_free_value_cb_set(result, (Ecore_Free_Cb) ecore_hash_destroy);
*buffer = '\0';
#ifdef DEBUG
fprintf(stdout, "PARSING INI %s\n", file);
@ -84,12 +82,10 @@ ecore_desktop_ini_get(const char *file)
while ((*c != ']') && (*c != '\n') && (*c != '\0'))
c++;
*c++ = '\0';
current = ecore_hash_new(ecore_str_hash, ecore_str_compare);
current = ein_hash_string_superfast_new(free);
if (current)
{
ecore_hash_free_key_cb_set(current, free);
ecore_hash_free_value_cb_set(current, free);
ecore_hash_set(result, strdup(key), current);
eina_hash_add(result, key, current);
#ifdef DEBUG
fprintf(stdout, " GROUP [%s]\n", key);
#endif
@ -121,10 +117,9 @@ ecore_desktop_ini_get(const char *file)
c++;
*c++ = '\0';
/* FIXME: should strip space at end, then unescape value. */
tv = ecore_hash_remove(current, key);
if (tv) free(tv);
eina_hash_del(current, key);
if (value[0] != '\0')
ecore_hash_set(current, strdup(key), strdup(value));
eina_hash_add(current, key, strdup(value));
#ifdef DEBUG
fprintf(stdout, " %s=%s\n", key, value);
#endif
@ -158,7 +153,7 @@ ecore_desktop_get(const char *file, const char *lang)
/* Kill the hash, it takes up way too much memory. */
if (result->data)
{
ecore_hash_destroy(result->data);
eina_hash_free(result->data);
result->data = NULL;
}
result->group = NULL;
@ -178,7 +173,7 @@ _ecore_desktop_get(const char *file, const char *lang)
double begin;
begin = ecore_time_get();
result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *)file);
result = eina_hash_find(desktop_cache, (char *)file);
/* Check if the cache is still valid. */
if (result)
{
@ -187,7 +182,7 @@ _ecore_desktop_get(const char *file, const char *lang)
{
if (st.st_mtime > result->mtime)
{
ecore_hash_remove(desktop_cache, result->original_path);
eina_hash_del(desktop_cache, result->original_path);
result = NULL;
}
stated = 1;
@ -214,9 +209,9 @@ _ecore_desktop_get(const char *file, const char *lang)
/* Timestamp the cache, and no need to stat the file twice if the cache was stale. */
if ((stated) || (stat(result->original_path, &st) >= 0))
result->mtime = st.st_mtime;
result->group = ecore_hash_get(result->data, "Desktop Entry");
result->group = eina_hash_find(result->data, "Desktop Entry");
if (!result->group)
result->group = ecore_hash_get(result->data, "KDE Desktop Entry");
result->group = eina_hash_find(result->data, "KDE Desktop Entry");
/* This is a "Desktop" file, probably an application. */
if (result->group)
{
@ -428,42 +423,42 @@ _ecore_desktop_get(const char *file, const char *lang)
}
}
value = ecore_hash_get(result->group, "MimeType");
value = eina_hash_find(result->group, "MimeType");
if (value)
result->MimeTypes =
ecore_desktop_paths_to_hash(value);
value = ecore_hash_get(result->group, "Actions");
value = eina_hash_find(result->group, "Actions");
if (value)
result->Actions =
ecore_desktop_paths_to_hash(value);
value = ecore_hash_get(result->group, "OnlyShowIn");
value = eina_hash_find(result->group, "OnlyShowIn");
if (value)
result->OnlyShowIn =
ecore_desktop_paths_to_hash(value);
value = ecore_hash_get(result->group, "NotShowIn");
value = eina_hash_find(result->group, "NotShowIn");
if (value)
result->NotShowIn =
ecore_desktop_paths_to_hash(value);
value = ecore_hash_get(result->group, "X-KDE-StartupNotify");
value = eina_hash_find(result->group, "X-KDE-StartupNotify");
if (value)
result->startup = (strcmp(value, "true") == 0);
value = ecore_hash_get(result->group, "StartupNotify");
value = eina_hash_find(result->group, "StartupNotify");
if (value)
result->startup = (strcmp(value, "true") == 0);
value = ecore_hash_get(result->group, "X-Enlightenment-WaitExit");
value = eina_hash_find(result->group, "X-Enlightenment-WaitExit");
if (value)
result->wait_exit = (strcmp(value, "true") == 0);
value = ecore_hash_get(result->group, "NoDisplay");
value = eina_hash_find(result->group, "NoDisplay");
if (value)
result->no_display = (strcmp(value, "true") == 0);
value = ecore_hash_get(result->group, "Hidden");
value = eina_hash_find(result->group, "Hidden");
if (value)
result->hidden = (strcmp(value, "true") == 0);
}
else
{
/*Maybe it's a 'trash' file - which also follows the Desktop FDO spec */
result->group = ecore_hash_get(result->data, "Trash Info");
result->group = eina_hash_find(result->data, "Trash Info");
if (result->group)
{
IFGETDUP(value, "Path", result->path);
@ -479,7 +474,7 @@ _ecore_desktop_get(const char *file, const char *lang)
result = NULL;
}
else
ecore_hash_set(desktop_cache, strdup(result->original_path), result);
eina_hash_add(desktop_cache, result->original_path, result);
}
error:
@ -504,6 +499,13 @@ error:
return result;
}
static Eina_Bool
_hash_keys(Eina_Hash *hash, const void *key, void *data, void *list)
{
ecore_list_append(list, key);
return EINA_TRUE;
}
void
ecore_desktop_save(Ecore_Desktop * desktop)
{
@ -517,27 +519,20 @@ ecore_desktop_save(Ecore_Desktop * desktop)
{
desktop->data = ecore_desktop_ini_get(desktop->original_path);
desktop->group =
(Ecore_Hash *) ecore_hash_get(desktop->data, "Desktop Entry");
(Eina_Hash *) eina_hash_find(desktop->data, "Desktop Entry");
if (!desktop->group)
desktop->group =
(Ecore_Hash *) ecore_hash_get(desktop->data,
(Eina_Hash *) eina_hash_find(desktop->data,
"KDE Desktop Entry");
if (!desktop->group)
{
trash = 1;
desktop->group =
(Ecore_Hash *) ecore_hash_get(desktop->data, "Trash Info");
(Eina_Hash *) eina_hash_find(desktop->data, "Trash Info");
}
}
else
{
desktop->group = ecore_hash_new(ecore_str_hash, ecore_str_compare);
if (desktop->group)
{
ecore_hash_free_key_cb_set(desktop->group, free);
ecore_hash_free_value_cb_set(desktop->group, free);
}
}
desktop->group = eina_hash_string_superfast_new(free);
}
if (desktop->group)
@ -552,9 +547,9 @@ ecore_desktop_save(Ecore_Desktop * desktop)
real = ecore_file_readlink(desktop->original_path);
if (real)
ecore_hash_set(desktop->group,
strdup("X-Enlightenment-OriginalPath"),
real);
eina_hash_add(desktop->group,
"X-Enlightenment-OriginalPath",
real);
}
}
@ -562,106 +557,119 @@ ecore_desktop_save(Ecore_Desktop * desktop)
commands = ecore_desktop_get_command(desktop, NULL, 0);
if (commands)
{
temp = ecore_list_first(commands);
if (temp)
ecore_hash_set(desktop->group, strdup("Exec"), strdup(temp));
ecore_list_destroy(commands);
temp = ecore_list_first(commands);
if (temp)
eina_hash_add(desktop->group, "Exec", strdup(temp));
ecore_list_destroy(commands);
}
if (desktop->name)
ecore_hash_set(desktop->group, strdup("Name"),
strdup(desktop->name));
eina_hash_add(desktop->group, "Name",
strdup(desktop->name));
if (desktop->generic)
ecore_hash_set(desktop->group, strdup("GenericName"),
strdup(desktop->generic));
eina_hash_add(desktop->group, "GenericName",
strdup(desktop->generic));
if (desktop->comment)
ecore_hash_set(desktop->group, strdup("Comment"),
strdup(desktop->comment));
eina_hash_add(desktop->group, "Comment",
strdup(desktop->comment));
if (desktop->type)
ecore_hash_set(desktop->group, strdup("Type"),
strdup(desktop->type));
eina_hash_add(desktop->group, "Type",
strdup(desktop->type));
if (desktop->URL)
ecore_hash_set(desktop->group, strdup("URL"), strdup(desktop->URL));
eina_hash_add(desktop->group, "URL", strdup(desktop->URL));
if (desktop->file)
ecore_hash_set(desktop->group, strdup("File"),
strdup(desktop->file));
eina_hash_add(desktop->group, "File",
strdup(desktop->file));
if (desktop->icon)
ecore_hash_set(desktop->group, strdup("Icon"),
strdup(desktop->icon));
eina_hash_add(desktop->group, "Icon",
strdup(desktop->icon));
if (desktop->icon_theme)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconTheme"),
strdup(desktop->icon_theme));
eina_hash_add(desktop->group, "X-Enlightenment-IconTheme",
strdup(desktop->icon_theme));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-IconTheme");
eina_hash_del(desktop->group, "X-Enlightenment-IconTheme");
if (desktop->icon_class)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconClass"),
strdup(desktop->icon_class));
eina_hash_add(desktop->group, "X-Enlightenment-IconClass",
strdup(desktop->icon_class));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-IconClass");
eina_hash_del(desktop->group, "X-Enlightenment-IconClass");
if (desktop->icon_path)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconPath"),
strdup(desktop->icon_path));
eina_hash_add(desktop->group, "X-Enlightenment-IconPath",
strdup(desktop->icon_path));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-IconPath");
eina_hash_del(desktop->group, "X-Enlightenment-IconPath");
if (desktop->window_class)
ecore_hash_set(desktop->group, strdup("StartupWMClass"),
strdup(desktop->window_class));
eina_hash_add(desktop->group, "StartupWMClass",
strdup(desktop->window_class));
if (desktop->categories)
ecore_hash_set(desktop->group, strdup("Categories"),
strdup(desktop->categories));
eina_hash_add(desktop->group, "Categories",
strdup(desktop->categories));
if (desktop->window_name)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowName"),
strdup(desktop->window_name));
eina_hash_add(desktop->group, "X-Enlightenment-WindowName",
strdup(desktop->window_name));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-WindowName");
eina_hash_del(desktop->group, "X-Enlightenment-WindowName");
if (desktop->window_title)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowTitle"),
strdup(desktop->window_title));
eina_hash_add(desktop->group, "X-Enlightenment-WindowTitle",
strdup(desktop->window_title));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-WindowTitle");
eina_hash_del(desktop->group, "X-Enlightenment-WindowTitle");
if (desktop->window_role)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowRole"),
strdup(desktop->window_role));
eina_hash_add(desktop->group, "X-Enlightenment-WindowRole",
strdup(desktop->window_role));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-WindowRole");
ecore_hash_remove(desktop->group, "X-KDE-StartupNotify");
eina_hash_del(desktop->group, "X-Enlightenment-WindowRole");
eina_hash_del(desktop->group, "X-KDE-StartupNotify");
if (desktop->wait_exit)
ecore_hash_set(desktop->group, strdup("X-Enlightenment-WaitExit"),
strdup("true"));
eina_hash_add(desktop->group, "X-Enlightenment-WaitExit",
strdup("true"));
else
ecore_hash_remove(desktop->group, "X-Enlightenment-WaitExit");
eina_hash_del(desktop->group, "X-Enlightenment-WaitExit");
if (desktop->startup)
ecore_hash_set(desktop->group, strdup("StartupNotify"),
strdup("true"));
eina_hash_add(desktop->group, "StartupNotify",
strdup("true"));
else
ecore_hash_remove(desktop->group, "StartupNotify");
eina_hash_del(desktop->group, "StartupNotify");
if (desktop->no_display)
ecore_hash_set(desktop->group, strdup("NoDisplay"), strdup("true"));
eina_hash_add(desktop->group, "NoDisplay", strdup("true"));
else
ecore_hash_remove(desktop->group, "NoDisplay");
eina_hash_del(desktop->group, "NoDisplay");
if (desktop->hidden)
ecore_hash_set(desktop->group, strdup("Hidden"), strdup("true"));
eina_hash_add(desktop->group, "Hidden", strdup("true"));
else
ecore_hash_remove(desktop->group, "Hidden");
eina_hash_del(desktop->group, "Hidden");
/* FIXME: deal with the ShowIn's and mime stuff. */
if (desktop->path)
ecore_hash_set(desktop->group, strdup("Path"),
strdup(desktop->path));
eina_hash_add(desktop->group, "Path",
strdup(desktop->path));
if (desktop->deletiondate)
ecore_hash_set(desktop->group, strdup("DeletionDate"),
strdup(desktop->deletiondate));
eina_hash_add(desktop->group, "DeletionDate",
strdup(desktop->deletiondate));
if (desktop->original_path)
{
FILE *f;
Ecore_List *list;
char *key;
Eina_Iterator *it = NULL;
ecore_file_unlink(desktop->original_path);
f = fopen(desktop->original_path, "wb");
list = ecore_hash_keys(desktop->group);
if ((list = ecore_list_new()))
return;
if ((it = eina_hash_iterator_key_new(desktop->group)))
{
ecore_list_destroy(list);
return;
}
eina_iterator_foreach(it, EINA_EACH(_hash_keys), list);
eina_iterator_free(it);
if ((!f) || (!list))
return;
@ -674,7 +682,7 @@ ecore_desktop_save(Ecore_Desktop * desktop)
{
char *value;
value = (char *)ecore_hash_get(desktop->group, key);
value = (char *)eina_hash_find(desktop->group, key);
if ((value) && (value[0] != '\0'))
fprintf(f, "%s=%s\n", key, value);
}
@ -683,11 +691,11 @@ ecore_desktop_save(Ecore_Desktop * desktop)
if (desktop->data)
{
ecore_hash_destroy(desktop->data);
eina_hash_free(desktop->data);
desktop->data = NULL;
}
else
ecore_hash_destroy(desktop->group);
eina_hash_free(desktop->group);
desktop->group = NULL;
}
}
@ -710,15 +718,7 @@ ecore_desktop_init()
return --init_count;
if (!desktop_cache)
{
desktop_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare);
if (desktop_cache)
{
ecore_hash_free_key_cb_set(desktop_cache, free);
ecore_hash_free_value_cb_set(desktop_cache,
(Ecore_Free_Cb) _ecore_desktop_destroy);
}
}
desktop_cache = eina_hash_string_superfast_new(_ecore_desktop_destroy);
if (!ecore_desktop_icon_init())
return --init_count;
@ -744,7 +744,7 @@ ecore_desktop_shutdown()
if (desktop_cache)
{
ecore_hash_destroy(desktop_cache);
eina_hash_free(desktop_cache);
desktop_cache = NULL;
}
@ -795,14 +795,14 @@ _ecore_desktop_destroy(Ecore_Desktop * desktop)
IFFREE(desktop->window_name);
IFFREE(desktop->window_title);
IFFREE(desktop->window_role);
if (desktop->NotShowIn) ecore_hash_destroy(desktop->NotShowIn);
if (desktop->OnlyShowIn) ecore_hash_destroy(desktop->OnlyShowIn);
if (desktop->Categories) ecore_hash_destroy(desktop->Categories);
if (desktop->MimeTypes) ecore_hash_destroy(desktop->MimeTypes);
if (desktop->Actions) ecore_hash_destroy(desktop->Actions);
if (desktop->NotShowIn) eina_hash_free(desktop->NotShowIn);
if (desktop->OnlyShowIn) eina_hash_free(desktop->OnlyShowIn);
if (desktop->Categories) eina_hash_free(desktop->Categories);
if (desktop->MimeTypes) eina_hash_free(desktop->MimeTypes);
if (desktop->Actions) eina_hash_free(desktop->Actions);
if (desktop->data)
{
ecore_hash_destroy(desktop->data);
eina_hash_free(desktop->data);
desktop->data = NULL;
}
desktop->group = NULL;

View File

@ -29,7 +29,7 @@ _ecore_desktop_icon_theme_cache_check(Ecore_Desktop_Icon_Theme *icon_theme);
static const char *ext[] =
{ "", ".edj", ".png", ".svgz", ".svg", ".xpm", NULL }; /* "" is in case the icon already has an extension, search for that first. */
static int init_count = 0;
static Ecore_Hash *icon_theme_cache = NULL;
static Eina_Hash *icon_theme_cache = NULL;
/**
* @defgroup Ecore_Desktop_Icon_Group icon theme Functions
@ -233,7 +233,7 @@ _ecore_desktop_icon_find0(const char *icon, const char *icon_size,
#ifdef DEBUG
printf("FDO icon = %s\n", path);
#endif
found = ecore_hash_get(directory->icons, path);
found = eina_hash_find(directory->icons, path);
if (found)
{
found = strdup(found);
@ -341,7 +341,7 @@ done:
return found;
}
Ecore_Hash *
Eina_Hash*
ecore_desktop_icon_theme_list(void)
{
static int loaded = 0;
@ -382,15 +382,7 @@ ecore_desktop_icon_init()
return init_count;
if (!icon_theme_cache)
{
icon_theme_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare);
if (icon_theme_cache)
{
ecore_hash_free_key_cb_set(icon_theme_cache, free);
ecore_hash_free_value_cb_set(icon_theme_cache,
ECORE_FREE_CB(_ecore_desktop_icon_theme_destroy));
}
}
icon_theme_cache = eina_hash_string_superfast_new(_ecore_desktop_icon_theme_destroy);
return init_count;
}
@ -411,7 +403,7 @@ ecore_desktop_icon_shutdown()
if (icon_theme_cache)
{
ecore_hash_destroy(icon_theme_cache);
eina_hash_free(icon_theme_cache);
icon_theme_cache = NULL;
}
@ -422,7 +414,7 @@ ecore_desktop_icon_shutdown()
* Get the contents of an index.theme file.
*
* Everything that is in the index.theme file is returned in the
* data member of the Ecore_Desktop_Icon_Theme structure, it's an Ecore_Hash
* data member of the Ecore_Desktop_Icon_Theme structure, it's an Eina_Hash
* as returned by ecore_desktop_ini_get(). Some of the data in the
* index.theme file is decoded into specific members of the returned
* structure.
@ -454,7 +446,7 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__
#endif
}
result = ecore_hash_get(icon_theme_cache, icon_theme);
result = eina_hash_find(icon_theme_cache, icon_theme);
if (result) goto done;
if (!theme_dir)
{
@ -474,7 +466,7 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__
if (!result) goto error;
result->data = ecore_desktop_ini_get(theme_path);
if (!result->data) goto error;
result->group = ecore_hash_get(result->data, "Icon Theme");
result->group = eina_hash_find(result->data, "Icon Theme");
if (!result->group) goto error;
@ -482,23 +474,23 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__
result->hicolor = 1;
/* According to the spec, name and comment are required, but we can fake those easily enough. */
value = ecore_hash_get(result->group, "Name");
value = eina_hash_find(result->group, "Name");
if (!value) value = icon_theme;
result->name = strdup(value);
value = ecore_hash_get(result->group, "Comment");
value = eina_hash_find(result->group, "Comment");
if (!value) value = "No comment provided.";
result->comment = strdup(value);
value = ecore_hash_get(result->group, "Inherits");
value = eina_hash_find(result->group, "Inherits");
if (value)
{
result->inherits = strdup(value);
if (result->inherits)
result->Inherits = ecore_desktop_paths_to_list(result->inherits);
}
value = ecore_hash_get(result->group, "Example");
value = eina_hash_find(result->group, "Example");
if (!value) value = "exec";
result->example = strdup(value);
value = ecore_hash_get(result->group, "Directories");
value = eina_hash_find(result->group, "Directories");
/* FIXME: Directories is also required, don't feel like faking it for now. */
if (!value) goto error;
result->directories = strdup(value);
@ -511,11 +503,11 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__
ecore_list_first_goto(Directories);
while ((directory = ecore_list_next(Directories)) != NULL)
{
Ecore_Hash *sub_group;
Eina_Hash *sub_group;
Ecore_Desktop_Icon_Theme_Directory *dir;
/* Get the details for this theme directory. */
sub_group = ecore_hash_get(result->data, directory);
sub_group = eina_hash_find(result->data, directory);
dir = calloc(1, sizeof (Ecore_Desktop_Icon_Theme_Directory));
if ((dir) && (sub_group))
{
@ -525,14 +517,14 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__
dir->path = strdup(directory);
snprintf(full_path, PATH_MAX, "%s/%s", theme_dir, directory);
dir->full_path = strdup(full_path);
value = ecore_hash_get(sub_group, "Type");
value = eina_hash_find(sub_group, "Type");
if (!value)
value = "Threshold";
dir->type = strdup(value);
size = ecore_hash_get(sub_group, "Size");
minsize = ecore_hash_get(sub_group, "MinSize");
maxsize = ecore_hash_get(sub_group, "MaxSize");
threshold = ecore_hash_get(sub_group, "Threshold");
size = eina_hash_find(sub_group, "Size");
minsize = eina_hash_find(sub_group, "MinSize");
maxsize = eina_hash_find(sub_group, "MaxSize");
threshold = eina_hash_find(sub_group, "Threshold");
if (size)
{
if (!minsize)
@ -558,8 +550,8 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__
/* This passes the basic validation tests, mark it as real and cache it. */
result->path = strdup(theme_path);
ecore_hash_set(icon_theme_cache, strdup(icon_theme), result);
ecore_hash_destroy(result->data);
eina_hash_add(icon_theme_cache, icon_theme, result);
eina_hash_free(result->data);
result->data = NULL;
result->group = NULL;
@ -576,7 +568,7 @@ error:
if (theme_path) free(theme_path);
if (result)
{
if (result->data) ecore_hash_destroy(result->data);
if (result->data) eina_hash_free(result->data);
_ecore_desktop_icon_theme_destroy(result);
}
return NULL;
@ -633,7 +625,7 @@ _ecore_desktop_icon_theme_directory_destroy(Ecore_Desktop_Icon_Theme_Directory *
if (icon_theme_directory->type)
free(icon_theme_directory->type);
if (icon_theme_directory->icons)
ecore_hash_destroy(icon_theme_directory->icons);
eina_hash_free(icon_theme_directory->icons);
free(icon_theme_directory);
}
@ -686,16 +678,14 @@ _ecore_desktop_icon_theme_cache_check(Ecore_Desktop_Icon_Theme *icon_theme)
{
if (dir->icons)
{
ecore_hash_destroy(dir->icons);
eina_hash_free(dir->icons);
dir->icons = NULL;
}
dir->icons = ecore_hash_new(ecore_str_hash, ecore_str_compare);
dir->icons = eina_hash_string_superfast_new(NULL);
if (dir->icons)
{
Ecore_List *files;
ecore_hash_free_key_cb_set(dir->icons, free);
ecore_hash_free_value_cb_set(dir->icons, free);
files = ecore_file_ls(dir->full_path);
if (files)
{
@ -704,7 +694,7 @@ _ecore_desktop_icon_theme_cache_check(Ecore_Desktop_Icon_Theme *icon_theme)
while ((file = ecore_list_next(files)))
{
snprintf(full_path, PATH_MAX, "%s/%s", dir->full_path, file);
ecore_hash_set(dir->icons, strdup(file), strdup(full_path));
eina_hash_add(dir->icons, file, strdup(full_path));
}
ecore_list_destroy(files);
}

View File

@ -24,7 +24,7 @@
struct _ecore_desktop_menu_expand_apps_data
{
char *path;
Ecore_Hash *pool;
Eina_Hash *pool;
int length;
};
@ -41,7 +41,7 @@ struct _ecore_desktop_menu_generate_data
{
char *name, *path;
Ecore_Desktop_Tree *rules;
Ecore_Hash *pool, *apps;
Eina_Hash *pool, *apps;
int unallocated;
Ecore_Desktop_Tree *rule;
@ -88,7 +88,7 @@ static void _ecore_desktop_menu_add_dirs(Ecore_Desktop_Tree * tree,
static int _ecore_desktop_menu_expand_apps(struct
_ecore_desktop_menu_unxml_data
*unxml_data, char *app_dir,
Ecore_Hash * pool);
Eina_Hash * pool);
static int _ecore_desktop_menu_check_app(void *data, const char *path);
static int _ecore_desktop_menu_merge(const void *data,
@ -123,7 +123,7 @@ static int _ecore_desktop_menu_apply_rules(struct
EAPI void
ecore_desktop_menu_for_each(void (*func)
(const char *name, const char *path, const char *directory, Ecore_Hash * apps))
(const char *name, const char *path, const char *directory, Eina_Hash * apps))
{
char *menu_file;
@ -177,9 +177,9 @@ _ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree,
char *path;
char *name;
char *directory;
Ecore_Hash *apps;
Eina_Hash *apps;
void (*func) (char *name, char *path, char *directory,
Ecore_Hash * apps);
Eina_Hash * apps);
func = data;
name = (char *)tree->elements[element].element;
@ -206,8 +206,8 @@ _ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree,
else
directory = NULL;
path = (char *)tree->elements[element + 1].element;
// pool = (Ecore_Hash *) tree->elements[element + 2].element;
apps = (Ecore_Hash *) tree->elements[element + 4].element;
// pool = (Eina_Hash *) tree->elements[element + 2].element;
apps = (Eina_Hash *) tree->elements[element + 4].element;
path = &path[11];
#ifdef DEBUG
printf("OUTPUTTING MENU - %s \t\t%s \t\t%s\n", path, name, directory);
@ -650,18 +650,14 @@ static Ecore_Desktop_Tree *
_ecore_desktop_menu_create_menu()
{
Ecore_Desktop_Tree *menu, *rules;
Ecore_Hash *pool, *apps;
Eina_Hash *pool, *apps;
menu = ecore_desktop_tree_new(NULL);
rules = ecore_desktop_tree_new(NULL);
pool = ecore_hash_new(ecore_str_hash, ecore_str_compare);
apps = ecore_hash_new(ecore_str_hash, ecore_str_compare);
pool = eina_hash_string_superfast_new(free);
apps = eina_hash_string_superfast_new(free);
if ((menu) && (rules) && (pool) && (apps))
{
ecore_hash_free_key_cb_set(pool, free);
ecore_hash_free_value_cb_set(pool, free);
ecore_hash_free_key_cb_set(apps, free);
ecore_hash_free_value_cb_set(apps, free);
ecore_desktop_tree_extend(menu, "<MENU < > <> <>");
ecore_desktop_tree_extend(menu, "<MENU_PATH ");
ecore_desktop_tree_add_hash(menu, pool);
@ -671,9 +667,9 @@ _ecore_desktop_menu_create_menu()
else
{
if (apps)
ecore_hash_destroy(apps);
eina_hash_free(apps);
if (pool)
ecore_hash_destroy(pool);
eina_hash_free(pool);
if (rules)
ecore_desktop_tree_del(rules);
if (menu)
@ -889,10 +885,10 @@ _ecore_desktop_menu_legacy_menu(void *data, const char *path)
}
else if (strcmp(".desktop", &file[count - 8]) == 0)
{
Ecore_Hash *pool;
Eina_Hash *pool;
Ecore_Desktop_Tree *rules;
pool = (Ecore_Hash *) legacy_data->current->elements[2].element;
pool = (Eina_Hash *) legacy_data->current->elements[2].element;
rules =
(Ecore_Desktop_Tree *) legacy_data->current->elements[3].element;
if (rules->size == 0)
@ -904,7 +900,7 @@ _ecore_desktop_menu_legacy_menu(void *data, const char *path)
ecore_desktop_tree_add_child(rules, new_rules);
}
sprintf(temp, "%s%s", legacy_data->prefix, file);
ecore_hash_set(pool, strdup(temp), strdup(path));
eina_hash_add(pool, temp, strdup(path));
#ifdef DEBUG
// printf
// ("POOLING - _ecore_desktop_menu_legacy_menu(void *data, %s) - %s - %s\n",
@ -1066,7 +1062,7 @@ _ecore_desktop_menu_add_dirs(Ecore_Desktop_Tree * tree, Ecore_List * paths,
static int
_ecore_desktop_menu_expand_apps(struct _ecore_desktop_menu_unxml_data
*unxml_data, char *app_dir, Ecore_Hash * pool)
*unxml_data, char *app_dir, Eina_Hash * pool)
{
if (pool)
{
@ -1107,12 +1103,17 @@ _ecore_desktop_menu_check_app(void *data, const char *path)
char *file;
file = strdup(path + our_data->length);
if ((file) && (path))
if (file)
{
for (i = 0; file[i] != '\0'; i++)
if (file[i] == '/')
file[i] = '-';
ecore_hash_set(our_data->pool, file, strdup(path));
if (path)
{
for (i = 0; file[i] != '\0'; i++)
if (file[i] == '/')
file[i] = '-';
eina_hash_add(our_data->pool, file, strdup(path));
}
free(file);
}
#ifdef DEBUG
// printf
// ("POOLING - _ecore_desktop_menu_check_app(void *data, %s) - %s\n",
@ -1423,9 +1424,9 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree,
generate_data.unallocated = unxml_data->unallocated;
generate_data.name = (char *)tree->elements[element].element;
generate_data.path = (char *)tree->elements[element + 1].element;
generate_data.pool = (Ecore_Hash *) tree->elements[element + 2].element;
generate_data.pool = (Eina_Hash *) tree->elements[element + 2].element;
generate_data.rules = (Ecore_Desktop_Tree *) tree->elements[element + 3].element;
generate_data.apps = (Ecore_Hash *) tree->elements[element + 4].element;
generate_data.apps = (Eina_Hash *) tree->elements[element + 4].element;
/* generate and inherit the pools on the first pass, and preparse the include/exclude logic. */
if (!generate_data.unallocated)
@ -1511,10 +1512,10 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree,
{
if (unxml_data->stack->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH)
{
Ecore_Hash *ancestor;
Eina_Hash *ancestor;
ancestor = (Ecore_Hash *) unxml_data->stack->elements[i].element;
ecore_hash_for_each_node(ancestor, _ecore_desktop_menu_inherit_apps, generate_data.pool);
ancestor = (Eina_Hash *) unxml_data->stack->elements[i].element;
eina_hash_foreach(ancestor, _ecore_desktop_menu_inherit_apps, generate_data.pool);
}
}
}
@ -1542,12 +1543,12 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree,
if (type == 'I')
{
generate_data.include = TRUE;
ecore_hash_for_each_node(generate_data.pool, _ecore_desktop_menu_select_app, &generate_data);
eina_hash_foreach(generate_data.pool, _ecore_desktop_menu_select_app, &generate_data);
}
else
{
generate_data.include = FALSE;
ecore_hash_for_each_node(generate_data.apps, _ecore_desktop_menu_select_app, &generate_data);
eina_hash_foreach(generate_data.apps, _ecore_desktop_menu_select_app, &generate_data);
}
}
}
@ -1575,39 +1576,26 @@ _ecore_desktop_menu_is_include(const void *data, Ecore_Desktop_Tree * tree, int
return 0;
}
static void
_ecore_desktop_menu_inherit_apps(void *value, void *user_data)
static Eina_Bool
_ecore_desktop_menu_inherit_apps(const Eina_Hash *hash, const void *key, void *value, void *user_data)
{
Ecore_Hash_Node *node;
Ecore_Hash *pool;
char *key, *app;
pool = (Ecore_Hash *) user_data;
node = (Ecore_Hash_Node *) value;
key = (char *)node->key;
app = (char *)node->value;
#ifdef DEBUG
// printf("CHECKING %s - %s\n", app, key);
#endif
if (!ecore_hash_get(pool, key))
ecore_hash_set(pool, strdup(key), strdup(app));
if (!eina_hash_find(user_data, key))
eina_hash_add(user_data, key, strdup(value));
}
static void
_ecore_desktop_menu_select_app(void *value, void *user_data)
_ecore_desktop_menu_select_app(const Eina_Hash *hash, const void *key, void *value, void *user_data)
{
Ecore_Hash_Node *node;
Ecore_Desktop *desktop;
struct _ecore_desktop_menu_generate_data *generate_data;
char *key, *app;
node = (Ecore_Hash_Node *) value;
generate_data = (struct _ecore_desktop_menu_generate_data *)user_data;
key = (char *)node->key;
app = (char *)node->value;
/* FIXME: pass an actuall language parameter. */
desktop = ecore_desktop_get(app, NULL);
desktop = ecore_desktop_get(value, NULL);
if (desktop)
{
@ -1619,16 +1607,16 @@ _ecore_desktop_menu_select_app(void *value, void *user_data)
desktop->allocated = TRUE;
if (generate_data->include)
{
ecore_hash_set(generate_data->apps, key, strdup(app));
eina_hash_add(generate_data->apps, key, strdup(value));
#ifdef DEBUG
printf("INCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), app, key);
printf("INCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), value, key);
#endif
}
else
{
ecore_hash_remove(generate_data->apps, key);
eina_hash_del(generate_data->apps, key);
#ifdef DEBUG
printf("EXCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), app, key);
printf("EXCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), value, key);
#endif
}
}
@ -1675,7 +1663,7 @@ _ecore_desktop_menu_apply_rules(struct _ecore_desktop_menu_generate_data *genera
case 'C':
{
/* Try to match a category. */
if ((desktop->Categories) && (ecore_hash_get(desktop->Categories, &rul[4]) != NULL))
if ((desktop->Categories) && (eina_hash_find(desktop->Categories, &rul[4]) != NULL))
sub_result = TRUE;
break;
}

View File

@ -898,25 +898,23 @@ _ecore_desktop_paths_cb_exe_exit(void *data, int type, void *event)
}
#endif
/** Split a list of paths into an Ecore_Hash.
/** Split a list of paths into an Eina_Hash.
*
* The list of paths can use any one of ;:, to seperate the paths.
* You can also escape the :;, with \.
*
* @param paths A list of paths.
*/
Ecore_Hash *
Eina_Hash*
ecore_desktop_paths_to_hash(const char *paths)
{
Ecore_Hash *result;
Eina_Hash *result;
char *path;
char buf[PATH_MAX], *p, *pp;
if (!paths) return NULL;
result = ecore_hash_new(ecore_str_hash, ecore_str_compare);
result = eina_hash_string_superfast_new(free);
if (!result) return NULL;
ecore_hash_free_key_cb_set(result, free);
ecore_hash_free_value_cb_set(result, free);
path = strdup(paths);
if (path)
@ -942,7 +940,7 @@ ecore_desktop_paths_to_hash(const char *paths)
p++;
}
*pp = '\0';
if (*buf) ecore_hash_set(result, strdup(buf), strdup(buf));
if (*buf) eina_hash_add(result, buf, strdup(buf));
if (*p) p++;
else p = NULL;
}
@ -951,7 +949,7 @@ ecore_desktop_paths_to_hash(const char *paths)
return result;
}
/** Split a list of paths into an Ecore_Hash.
/** Split a list of paths into an Eina_Hash.
*
* The list of paths can use any one of ;:, to seperate the paths.
* You can also escape the :;, with \.

View File

@ -3,8 +3,11 @@
#include "Ecore_Desktop.h"
#include "ecore_desktop_private.h"
static void ecore_desktop_tree_dump_each_hash_node(void *value,
void *user_data);
static Eina_Bool
ecore_desktop_tree_dump_each_hash_node(const Eina_Hash *hash,
const void *key,
void *value,
void *user_data);
/* Just a quick and dirty tree implemtation that will likely get replaced by
* something much saner at a later date. I wrote most of this while falling
@ -172,7 +175,7 @@ ecore_desktop_tree_add_child(Ecore_Desktop_Tree * tree,
}
Ecore_Desktop_Tree *
ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree, Ecore_Hash * element)
ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree, Eina_Hash * element)
{
tree->elements =
(Ecore_Desktop_Tree_Element *) realloc(tree->elements,
@ -310,10 +313,10 @@ ecore_desktop_tree_dump(Ecore_Desktop_Tree * tree, int level)
lev = level + 1;
printf("HASH ELEMENT TYPE\n");
ecore_hash_for_each_node((Ecore_Hash *) tree->elements[i].
element,
ecore_desktop_tree_dump_each_hash_node,
&lev);
eina_hash_foreach((Eina_Hash *) tree->elements[i].
element,
ecore_desktop_tree_dump_each_hash_node,
&lev);
}
break;
@ -326,18 +329,19 @@ ecore_desktop_tree_dump(Ecore_Desktop_Tree * tree, int level)
}
}
static void
ecore_desktop_tree_dump_each_hash_node(void *value, void *user_data)
static Eina_Bool
ecore_desktop_tree_dump_each_hash_node(const Eina_Hash *hash,
const void *key,
void *value,
void *user_data)
{
Ecore_Hash_Node *node;
int level;
int j;
node = (Ecore_Hash_Node *) value;
level = *((int *)user_data);
for (j = 0; j < level; j++)
printf(".");
printf("%s = %s\n", (char *)node->key, (char *)node->value);
printf("%s = %s\n", (char *)key, (char *)value);
}
void
@ -351,7 +355,7 @@ ecore_desktop_tree_del(Ecore_Desktop_Tree * tree)
ecore_desktop_tree_del((Ecore_Desktop_Tree *) tree->elements[i].
element);
else if (tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH)
ecore_hash_destroy((Ecore_Hash *) tree->elements[i].element);
eina_hash_free((Eina_Hash *) tree->elements[i].element);
}
E_FREE(tree->elements);

View File

@ -43,7 +43,7 @@ static Ecore_Fd_Handler *_window_event_fd_handler_handle = NULL;
static Ecore_Fd_Handler *_input_event_fd_handler_handle = NULL;
/* this hash is to store all the possible key names for fast lookup */
static Ecore_Hash *_ecore_directfb_key_symbols_hash = NULL;
static Eina_Hash *_ecore_directfb_key_symbols_hash = NULL;
static IDirectFB *_dfb = NULL; // the main interface
@ -163,7 +163,7 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt)
{
case DFEC_INPUT:
key_symbol = evt->input.key_symbol;
k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol);
k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol);
if(!k)
{
@ -179,7 +179,7 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt)
case DFEC_WINDOW:
key_symbol = evt->window.key_symbol;
k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol);
k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol);
if(!k)
{
@ -211,7 +211,7 @@ _ecore_directfb_event_handle_key_up(DFBEvent *evt)
{
case DFEC_INPUT:
key_symbol = evt->input.key_symbol;
k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol);
k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol);
if(!k)
@ -228,7 +228,7 @@ _ecore_directfb_event_handle_key_up(DFBEvent *evt)
case DFEC_WINDOW:
key_symbol = evt->window.key_symbol;
k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol);
k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol);
if(!k)
{
@ -698,14 +698,14 @@ ecore_directfb_init(const char *name)
ECORE_DIRECTFB_EVENT_WHEEL = ecore_event_type_new();;
/* create the hash table for the keynames */
_ecore_directfb_key_symbols_hash = ecore_hash_new(_ecore_directfb_hash_create,_ecore_directfb_hash_compare);
_ecore_directfb_key_symbols_hash = eina_hash_int32_new(NULL);
for(i=0; i<_ecore_directfb_key_symbols_count; i++)
{
struct keymap *k;
k = malloc(sizeof(struct keymap));
k->name = _ecore_directfb_key_symbols[i].name;
k->string = _ecore_directfb_key_symbols[i].string;
ecore_hash_set(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id, k);
eina_hash_add(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id, k);
}
/* create the hash for the windows(key = windowid, val = Ecore_DirectFB_Window struct) */
return _ecore_directfb_init_count;
@ -728,8 +728,8 @@ ecore_directfb_shutdown(void)
for(i=0; i<_ecore_directfb_key_symbols_count; i++)
{
struct keymap *k;
k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id);
ecore_hash_remove(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id);
k = eina_hash_find(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id);
eina_hash_del(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id);
free(k);
}

View File

@ -687,7 +687,7 @@ ecore_evas_data_get(const Ecore_Evas *ee, const char *key)
if (!key) return NULL;
return evas_hash_find(ee->data, key);
return eina_hash_find(ee->data, key);
}
/**
@ -717,9 +717,13 @@ ecore_evas_data_set(Ecore_Evas *ee, const char *key, const void *data)
if (!key) return;
ee->data = evas_hash_del(ee->data, key, NULL);
eina_hash_del(ee->data, key, NULL);
if (data)
ee->data = evas_hash_add(ee->data, key, data);
{
if (!ee->data)
ee->data = eina_hash_string_superfast_new(NULL);
eina_hash_add(ee->data, key, data);
}
}
#define IFC(_ee, _fn) if (_ee->engine.func->_fn) {_ee->engine.func->_fn
@ -2410,7 +2414,7 @@ _ecore_evas_free(Ecore_Evas *ee)
{
_ecore_evas_free(ee->sub_ecore_evas->data);
}
if (ee->data) evas_hash_free(ee->data);
if (ee->data) eina_hash_free(ee->data);
if (ee->name) free(ee->name);
if (ee->prop.title) free(ee->prop.title);
if (ee->prop.name) free(ee->prop.name);

View File

@ -14,7 +14,7 @@ static int _ecore_evas_fps_debug = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[13];
static Ecore_Evas *ecore_evases = NULL;
static Evas_Hash *ecore_evases_hash = NULL;
static Eina_Hash *ecore_evases_hash = NULL;
static Ecore_Idle_Enterer *ecore_evas_directfb_idle_enterer = NULL;
@ -90,19 +90,19 @@ _ecore_evas_directfb_winid_str_get(Ecore_X_Window win)
static Ecore_Evas *
_ecore_evas_directfb_match(DFBWindowID win)
{
{
Ecore_Evas *ee;
ee = evas_hash_find(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(win));
ee = eina_hash_find(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(win));
return ee;
}
static void
static void
_ecore_evas_directfb_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp)
{
ee->mouse.x = x;
ee->mouse.y = y;
if (ee->prop.cursor.object)
{
evas_object_show(ee->prop.cursor.object);
@ -324,19 +324,19 @@ _ecore_evas_directfb_init(void)
ecore_evas_event_handlers[10] = NULL;
ecore_evas_event_handlers[11] = NULL;
ecore_evas_event_handlers[12] = NULL;
return _ecore_evas_init_count;
}
/* engine functions */
/********************/
static void
_ecore_evas_directfb_free(Ecore_Evas *ee)
{
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
ecore_directfb_window_del(ee->engine.directfb.window);
ecore_evases = _ecore_list2_remove(ecore_evases, ee);
ecore_evases = _ecore_list2_remove(ecore_evases, ee);
_ecore_evas_directfb_shutdown();
ecore_directfb_shutdown();
}
@ -601,12 +601,14 @@ ecore_evas_directfb_new(const char *disp_name, int windowed, int x, int y, int w
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
}
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
return ee;
#else
disp_name = NULL;
windowed = x = y = w = h = 0;
return NULL;
#endif
#endif
}

View File

@ -233,7 +233,7 @@ struct _Ecore_Evas
Eina_Bool should_be_visible : 1;
Eina_Bool alpha : 1;
Evas_Hash *data;
Eina_Hash *data;
struct {
int x, y;

View File

@ -29,7 +29,7 @@ static int _ecore_evas_fps_debug = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
static Ecore_Evas *ecore_evases = NULL;
static Evas_Hash *ecore_evases_hash = NULL;
static Eina_Hash *ecore_evases_hash = NULL;
static int _ecore_evas_win32_event_key_down(void *data __UNUSED__, int type __UNUSED__, void *event);
@ -207,7 +207,7 @@ _ecore_evas_win32_match(Ecore_Win32_Window *window)
{
Ecore_Evas *ee;
ee = evas_hash_find(ecore_evases_hash, _ecore_evas_win32_winid_str_get(window));
ee = eina_hash_find(ecore_evases_hash, _ecore_evas_win32_winid_str_get(window));
return ee;
}
@ -586,7 +586,7 @@ static void
_ecore_evas_win32_free(Ecore_Evas *ee)
{
ecore_win32_window_del(ee->engine.win32.window);
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee);
ecore_evases = _ecore_list2_remove(ecore_evases, ee);
_ecore_evas_win32_shutdown();
ecore_win32_shutdown();
@ -1178,7 +1178,9 @@ _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_init)(Ecore_Evas *ee),
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee);
return ee;
}

View File

@ -32,7 +32,7 @@ static int _ecore_evas_fps_debug = 0;
static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
static Ecore_Evas *ecore_evases = NULL;
static Evas_Hash *ecore_evases_hash = NULL;
static Eina_Hash *ecore_evases_hash = NULL;
static int _ecore_evas_wince_event_key_down(void *data __UNUSED__, int type __UNUSED__, void *event);
@ -206,7 +206,7 @@ _ecore_evas_wince_match(Ecore_WinCE_Window *window)
{
Ecore_Evas *ee;
ee = evas_hash_find(ecore_evases_hash, _ecore_evas_wince_winid_str_get(window));
ee = eina_hash_find(ecore_evases_hash, _ecore_evas_wince_winid_str_get(window));
return ee;
}
@ -507,7 +507,7 @@ static void
_ecore_evas_wince_free(Ecore_Evas *ee)
{
ecore_wince_window_del(ee->engine.wince.window);
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee);
ecore_evases = _ecore_list2_remove(ecore_evases, ee);
_ecore_evas_wince_shutdown();
ecore_wince_shutdown();
@ -988,7 +988,9 @@ ecore_evas_software_wince_new_internal(int backend,
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee);
return ee;
}

View File

@ -22,7 +22,7 @@ static int _ecore_evas_init_count = 0;
static int _ecore_evas_fps_debug = 0;
static Ecore_Evas *ecore_evases = NULL;
static Evas_Hash *ecore_evases_hash = NULL;
static Eina_Hash *ecore_evases_hash = NULL;
static Ecore_Event_Handler *ecore_evas_event_handlers[18];
static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
@ -372,7 +372,7 @@ _ecore_evas_x_match(Ecore_X_Window win)
{
Ecore_Evas *ee;
ee = evas_hash_find(ecore_evases_hash, _ecore_evas_x_winid_str_get(win));
ee = eina_hash_find(ecore_evases_hash, _ecore_evas_x_winid_str_get(win));
return ee;
}
@ -1330,14 +1330,14 @@ _ecore_evas_x_free(Ecore_Evas *ee)
#else
ee->engine.x.damages = 0;
#endif /* ! HAVE_ECORE_X_XCB */
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
while (ee->engine.x.win_extra)
{
Ecore_X_Window *winp;
winp = ee->engine.x.win_extra->data;
ee->engine.x.win_extra = eina_list_remove_list(ee->engine.x.win_extra, ee->engine.x.win_extra);
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(*winp), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(*winp), ee);
free(winp);
}
ecore_evases = _ecore_list2_remove(ecore_evases, ee);
@ -1838,7 +1838,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
ee->shaped = 0;
ee->alpha = alpha;
ecore_x_window_del(ee->engine.x.win);
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (ee->alpha)
{
if (ee->prop.override)
@ -1886,7 +1886,9 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
ecore_x_window_shape_mask_set(ee->engine.x.win, 0);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (ee->prop.borderless)
ecore_x_mwm_borderless_set(ee->engine.x.win, ee->prop.borderless);
if (ee->visible) ecore_x_window_show(ee->engine.x.win);
@ -1917,7 +1919,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
ee->shaped = 0;
ee->alpha = alpha;
ecore_x_window_del(ee->engine.x.win);
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (ee->alpha)
{
if (ee->prop.override)
@ -1958,7 +1960,9 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
ecore_x_window_shape_mask_set(ee->engine.x.win, 0);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (ee->prop.borderless)
ecore_x_mwm_borderless_set(ee->engine.x.win, ee->prop.borderless);
if (ee->visible) ecore_x_window_show(ee->engine.x.win);
@ -1981,7 +1985,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
ee->shaped = 0;
ee->alpha = alpha;
ecore_x_window_del(ee->engine.x.win);
ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (ee->alpha)
{
if (ee->prop.override)
@ -2016,7 +2020,9 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
ecore_x_window_shape_mask_set(ee->engine.x.win, 0);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (ee->prop.borderless)
ecore_x_mwm_borderless_set(ee->engine.x.win, ee->prop.borderless);
if (ee->visible) ecore_x_window_show(ee->engine.x.win);
@ -2832,7 +2838,9 @@ ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent,
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
return ee;
#else
return NULL;
@ -2933,7 +2941,9 @@ ecore_evas_software_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window wi
{
*winp = win;
ee->engine.x.win_extra = eina_list_append(ee->engine.x.win_extra, winp);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee);
}
#else
#endif
@ -3020,7 +3030,9 @@ ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent,
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
# endif /* HAVE_ECORE_X_XCB */
return ee;
@ -3279,7 +3291,9 @@ ecore_evas_xrender_x11_new(const char *disp_name, Ecore_X_Window parent,
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
return ee;
#else
return NULL;
@ -3493,7 +3507,9 @@ ecore_evas_software_x11_16_new(const char *disp_name, Ecore_X_Window parent,
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
if (!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee);
return ee;
#else
return NULL;
@ -3594,7 +3610,9 @@ ecore_evas_software_x11_16_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window
{
*winp = win;
ee->engine.x.win_extra = eina_list_append(ee->engine.x.win_extra, winp);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee);
if(!ecore_evases_hash)
ecore_evases_hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee);
}
#else
#endif /* ! BUILD_ECORE_EVAS_SOFTWARE_16_X11 */

View File

@ -15,8 +15,14 @@ static void _ecore_imf_module_append(Ecore_Plugin *plugin, const Ecore_IMF_Conte
static void _ecore_imf_module_free(Ecore_IMF_Module *module);
static int _ecore_imf_modules_exists(const char *ctx_id);
typedef struct _Ecore_IMF_Selector
{
const char *toselect;
void *selected;
} Ecore_IMF_Selector;
static Ecore_Path_Group *ecore_imf_modules_path = NULL;
static Ecore_Hash *modules = NULL;
static Eina_Hash *modules = NULL;
void
ecore_imf_module_init(void)
@ -46,7 +52,7 @@ ecore_imf_module_shutdown(void)
{
if (modules)
{
ecore_hash_destroy(modules);
eina_hash_free(modules);
modules = NULL;
}
@ -54,27 +60,35 @@ ecore_imf_module_shutdown(void)
ecore_imf_modules_path = NULL;
}
static Eina_Bool
_hash_module_available_get(const Eina_Hash *hash, int *data, void *list)
{
ecore_list_append(list, data);
return EINA_TRUE;
}
Ecore_List *
ecore_imf_module_available_get(void)
{
Ecore_List *values;
Eina_Iterator *it = NULL;
unsigned int i = 0;
if (!modules) return NULL;
/* ecore_hash_values() */
values = ecore_list_new();
while (i < ecore_prime_table[modules->size])
{
if (modules->buckets[i])
{
Ecore_Hash_Node *node;
if (!values) return NULL;
for (node = modules->buckets[i]; node; node = node->next)
ecore_list_append(values, node->value);
}
i++;
it = eina_hash_iterator_data_new(modules);
if (!it)
{
ecore_list_destroy(values);
return NULL;
}
eina_iterator_foreach(it, EINA_EACH(_hash_module_available_get), values);
eina_iterator_free(it);
ecore_list_first_goto(values);
return values;
@ -84,7 +98,7 @@ Ecore_IMF_Module *
ecore_imf_module_get(const char *ctx_id)
{
if (!modules) return NULL;
return ecore_hash_get(modules, ctx_id);
return eina_hash_find(modules, ctx_id);
}
Ecore_IMF_Context *
@ -94,7 +108,7 @@ ecore_imf_module_context_create(const char *ctx_id)
Ecore_IMF_Context *ctx = NULL;
if (!modules) return NULL;
module = ecore_hash_get(modules, ctx_id);
module = eina_hash_find(modules, ctx_id);
if (module)
{
ctx = module->create();
@ -109,17 +123,55 @@ ecore_imf_module_context_create(const char *ctx_id)
return ctx;
}
static Eina_Bool
_hash_ids_get(const Eina_Hash *hash, const char *key, void *list)
{
ecore_list_append(list, key);
return EINA_TRUE;
}
Ecore_List *
ecore_imf_module_context_ids_get(void)
{
Ecore_List *l = NULL;
Eina_Iterator *it = NULL;
if (!modules) return NULL;
return ecore_hash_keys(modules);
l = ecore_list_new();
if (!l) return NULL;
it = eina_hash_iterator_key_new(modules);
if (!it)
{
ecore_list_destroy(l);
return NULL;
}
eina_iterator_foreach(it, EINA_EACH(_hash_ids_get), l);
eina_iterator_free(it);
return l;
}
static Eina_Bool
_hash_ids_by_canvas_type_get(const Eina_Hash *hash, int *data, void *fdata)
{
Ecore_IMF_Module *module = data;
Ecore_IMF_Selector *selector = fdata;
if (!strcmp(module->info->canvas_type, selector->toselect))
ecore_list_append(selector->selected, (void *)module->info->id);
return EINA_TRUE;
}
Ecore_List *
ecore_imf_module_context_ids_by_canvas_type_get(const char *canvas_type)
{
Ecore_IMF_Selector selector;
Ecore_List *values;
Eina_Iterator *it = NULL;
unsigned int i = 0;
if (!modules) return NULL;
@ -128,21 +180,20 @@ ecore_imf_module_context_ids_by_canvas_type_get(const char *canvas_type)
return ecore_imf_module_context_ids_get();
values = ecore_list_new();
while (i < ecore_prime_table[modules->size])
{
if (modules->buckets[i])
{
Ecore_Hash_Node *node;
if (!values) return NULL;
for (node = modules->buckets[i]; node; node = node->next)
{
Ecore_IMF_Module *module = node->value;
if (strcmp(module->info->canvas_type, canvas_type) == 0)
ecore_list_append(values, (void *) module->info->id);
}
}
i++;
it = eina_hash_iterator_data_new(modules);
if (!it)
{
ecore_list_destroy(values);
return NULL;
}
selector.toselect = canvas_type;
selector.selected = values;
eina_iterator_foreach(it, EINA_EACH(_hash_ids_by_canvas_type_get), &selector);
eina_iterator_free(it);
ecore_list_first_goto(values);
return values;
@ -215,11 +266,7 @@ _ecore_imf_module_append(Ecore_Plugin *plugin,
Ecore_IMF_Module *module;
if (!modules)
{
modules = ecore_hash_new(ecore_str_hash, ecore_str_compare);
ecore_hash_free_key_cb_set(modules, free);
ecore_hash_free_value_cb_set(modules, (Ecore_Free_Cb) _ecore_imf_module_free);
}
modules = eina_hash_string_superfast_new(_ecore_imf_module_free);
module = malloc(sizeof(Ecore_IMF_Module));
module->plugin = plugin;
@ -227,7 +274,7 @@ _ecore_imf_module_append(Ecore_Plugin *plugin,
/* cache imf_module_create as it may be used several times */
module->create = imf_module_create;
ecore_hash_set(modules, strdup(info->id), module);
eina_hash_add(modules, info->id, module);
}
static void
@ -244,6 +291,13 @@ _ecore_imf_module_free(Ecore_IMF_Module *module)
static int
_ecore_imf_modules_exists(const char *ctx_id)
{
Eina_Iterator *it = NULL;
if (!modules) return 0;
return (ecore_hash_get(modules, ctx_id) != NULL);
if (!ctx_id) return 0;
if (eina_hash_find(modules, ctx_id))
return 1;
return 0;
}

View File

@ -60,7 +60,7 @@ static void _ecore_x_netwm_startup_info_free(void *data);
* Local variables
*/
static Ecore_Hash *startup_info = NULL;
static Eina_Hash *startup_info = NULL;
/**
* Initialize the NetWM module
@ -68,11 +68,7 @@ static Ecore_Hash *startup_info = NULL;
EAPI void
ecore_x_netwm_init(void)
{
startup_info = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
if (startup_info)
{
ecore_hash_free_value_cb_set(startup_info, _ecore_x_netwm_startup_info_free);
}
startup_info = eina_hash_string_superfast_new(_ecore_x_netwm_startup_info_free);
}
/**
@ -82,7 +78,7 @@ EAPI void
ecore_x_netwm_shutdown(void)
{
if (startup_info)
ecore_hash_destroy(startup_info);
eina_hash_free(startup_info);
startup_info = NULL;
}
@ -2765,11 +2761,13 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window window,
{
#if 0
Ecore_X_Startup_Info *info;
unsigned char exists = 0;
if (!startup_info) return 0;
info = ecore_hash_get(startup_info, (void *)window);
info = eina_hash_find(startup_info, (void *)window);
if (info)
{
exists = 1;
printf("Already got info for win: 0x%x\n", window);
_ecore_x_netwm_startup_info_free(info);
}
@ -2787,7 +2785,10 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window window,
memcpy(info->buffer, data, 20);
info->length += 20;
info->buffer[info->length] = 0;
ecore_hash_set(startup_info, (void *)info->win, info);
if (exists)
eina_hash_modify(startup_info, (void *)info->win, info);
else
eina_hash_add(startup_info, (void *)info->win, info);
if (strlen(info->buffer) != 20)
{
/* We have a '\0' in there, the message is done */
@ -2810,7 +2811,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window window,
char *p;
if (!startup_info) return 0;
info = ecore_hash_get(startup_info, (void *)window);
info = eina_hash_find(startup_info, (void *)window);
if (!info) return 0;
if ((info->length + 20) > info->buffer_size)
{
@ -2818,7 +2819,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window window,
info->buffer = realloc(info->buffer, info->buffer_size * sizeof(char));
if (!info->buffer)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -2922,7 +2923,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
p = strchr(info->buffer, ':');
if (!p)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -2943,7 +2944,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
event = ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE;
else
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -2952,7 +2953,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
if (!_ecore_x_netwm_startup_info_parse(info, p))
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -2962,7 +2963,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
e = calloc(1, sizeof(Ecore_X_Event_Startup_Sequence));
if (!e)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -2972,7 +2973,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
if (event == ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
}
else

View File

@ -56,21 +56,19 @@ static void _ecore_x_netwm_startup_info_free(void *data);
* Local variables
*/
static Ecore_Hash *startup_info = NULL;
static Eina_Hash *startup_info = NULL;
EAPI void
ecore_x_netwm_init(void)
{
startup_info = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
if (startup_info)
ecore_hash_free_value_cb_set(startup_info, _ecore_x_netwm_startup_info_free);
startup_info = eina_hash_string_superfast_new(_ecore_x_netwm_startup_info_free);
}
EAPI void
ecore_x_netwm_shutdown(void)
{
if (startup_info)
ecore_hash_destroy(startup_info);
eina_hash_free(startup_info);
startup_info = NULL;
}
@ -1140,11 +1138,13 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data)
{
#if 0
Ecore_X_Startup_Info *info;
unsigned char *exists = 0;
if (!startup_info) return 0;
info = ecore_hash_get(startup_info, (void *)win);
info = eina_hash_find(startup_info, (void *)win);
if (info)
{
exists = 1;
printf("Already got info for win: 0x%x\n", win);
_ecore_x_netwm_startup_info_free(info);
}
@ -1162,7 +1162,10 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data)
memcpy(info->buffer, data, 20);
info->length += 20;
info->buffer[info->length] = 0;
ecore_hash_set(startup_info, (void *)info->win, info);
if (exists)
eina_hash_modify(startup_info, (void *)info->win, info);
else
eina_hash_add(startup_info, (void *)info->win, info);
if (strlen(info->buffer) != 20)
{
/* We have a '\0' in there, the message is done */
@ -1183,7 +1186,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data)
char *p;
if (!startup_info) return 0;
info = ecore_hash_get(startup_info, (void *)win);
info = eina_hash_find(startup_info, (void *)win);
if (!info) return 0;
if ((info->length + 20) > info->buffer_size)
{
@ -1191,7 +1194,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data)
info->buffer = realloc(info->buffer, info->buffer_size * sizeof(char));
if (!info->buffer)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -1269,7 +1272,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
p = strchr(info->buffer, ':');
if (!p)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -1290,7 +1293,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
event = ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE;
else
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -1299,7 +1302,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
if (!_ecore_x_netwm_startup_info_parse(info, p))
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -1309,7 +1312,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
e = calloc(1, sizeof(Ecore_X_Event_Startup_Sequence));
if (!e)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
return 0;
}
@ -1319,7 +1322,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info)
if (event == ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE)
{
ecore_hash_remove(startup_info, (void *)info->win);
eina_hash_del(startup_info, (void *)info->win);
_ecore_x_netwm_startup_info_free(info);
}
else