okay, I'm almost done with this now...
only thing that needs to be converted at this point is ecore_event...
I'll get on that later..
David; you might want to absorb the ecore_exe part of this patch into
your current work :)
Cheers,
--
Morten
:wq
Index: ecore_events.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_events.c,v
retrieving revision 1.19
diff -u -r1.19 ecore_events.c
--- ecore_events.c 30 Aug 2005 10:05:26 -0000 1.19
+++ ecore_events.c 2 Jan 2006 11:49:19 -0000
@@ -471,7 +471,7 @@
Ecore_Event_Exe_Exit *e;
e = ev;
- if (e->exe) _ecore_exe_free(e->exe);
+ if (e->exe) ecore_exe_del(e->exe);
free(e);
}
#endif
Index: ecore_exe.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_exe.c,v
retrieving revision 1.28
diff -u -r1.28 ecore_exe.c
--- ecore_exe.c 30 Dec 2005 19:28:54 -0000 1.28
+++ ecore_exe.c 2 Jan 2006 11:49:19 -0000
@@ -1,5 +1,6 @@
#include "ecore_private.h"
#include "Ecore.h"
+#include "Ecore_Data.h"
#include <errno.h>
#include <sys/wait.h>
@@ -12,9 +13,10 @@
static void _ecore_exe_flush(Ecore_Exe *exe);
static void _ecore_exe_event_exe_data_free(void *data __UNUSED__, void *ev);
-static Ecore_Exe *exes = NULL;
+static Ecore_List *exes = NULL;
static char *shell = NULL;
+static void _ecore_exe_free(void *data);
/* FIXME: This errno checking stuff should be put elsewhere for everybody to
use.
* For now it lives here though, just to make testing easier.
@@ -196,10 +198,17 @@
return NULL;
}
ECORE_MAGIC_SET(exe, ECORE_MAGIC_EXE);
+
+ if(!exes)
+ {
+ exes = ecore_list_new();
+ ecore_list_set_free_cb(exes, ECORE_FREE_CB(_ecore_exe_free));
+ }
+
exe->pid = pid;
exe->data = (void *)data;
exe->cmd = strdup(exe_cmd);
- exes = _ecore_list2_append(exes, exe);
+ ecore_list_append(exes, (void *)exe);
return exe;
}
_ecore_exe_exec_it(exe_cmd);
@@ -379,7 +388,7 @@
}
}
- exes = _ecore_list2_append(exes, exe);
+ ecore_list_append(exes, (void *)exe);
n = 0;
}
else
@@ -393,7 +402,12 @@
if (!ok)
{ /* Something went wrong, so pull down everything. */
- IF_FN_DEL(_ecore_exe_free, exe);
+ Ecore_Exe *e;
+ e = ecore_list_goto(exes, (void *)exe);
+ if(e)
+ ecore_list_remove_destroy(exes);
+ else
+ _ecore_exe_free((void *)exe);
}
else
printf("Running as %d for %s.\n", exe->pid, exe->cmd);
@@ -506,15 +520,22 @@
* @ingroup Ecore_Exe_Basic_Group
*/
void *
-ecore_exe_free(Ecore_Exe *exe)
+ecore_exe_del(Ecore_Exe *exe)
{
+ void *ret = NULL;
+
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE,
- "ecore_exe_free");
+ "ecore_exe_del");
return NULL;
}
- return _ecore_exe_free(exe);
+
+ ecore_list_goto(exes, (void *)exe);
+ ret = ((Ecore_Exe *)ecore_list_current(exes))->data;
+ ecore_list_remove_destroy(exes);
+
+ return ret;
}
/**
@@ -670,19 +691,18 @@
void
_ecore_exe_shutdown(void)
{
- while (exes) _ecore_exe_free(exes);
+ if (exes) ecore_list_destroy(exes);
}
Ecore_Exe *
_ecore_exe_find(pid_t pid)
{
- Ecore_List2 *l;
+ Ecore_Exe *exe;
- for (l = (Ecore_List2 *)exes; l; l = l->next)
+ for (exe = (Ecore_Exe *)ecore_list_goto_first(exes);
+ exe;
+ exe = (Ecore_Exe *)ecore_list_next(exes))
{
- Ecore_Exe *exe;
-
- exe = (Ecore_Exe *)l;
if (exe->pid == pid) return exe;
}
return NULL;
@@ -773,13 +793,14 @@
return;
}
-void *
-_ecore_exe_free(Ecore_Exe *exe)
+static void
+_ecore_exe_free(void *data)
{
- void *data;
+ Ecore_Exe *exe;
int ok = 0;
int result;
+ exe = (Ecore_Exe *)data;
data = exe->data;
IF_FN_DEL(ecore_main_fd_handler_del, exe->write_fd_handler);
@@ -790,11 +811,9 @@
IF_FREE(exe->read_data_buf);
IF_FREE(exe->cmd);
- exes = _ecore_list2_remove(exes, exe);
ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE);
IF_FREE(exe->tag);
free(exe);
- return data;
}
Index: ecore_idle_enterer.c
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_idle_enterer.c,v
retrieving revision 1.6
diff -u -r1.6 ecore_idle_enterer.c
--- ecore_idle_enterer.c 30 Aug 2005 10:05:26 -0000 1.6
+++ ecore_idle_enterer.c 2 Jan 2006 11:49:19 -0000
@@ -1,8 +1,11 @@
#include "ecore_private.h"
#include "Ecore.h"
+#include "Ecore_Data.h"
-static Ecore_Idle_Enterer *idle_enterers = NULL;
-static int idle_enterers_delete_me = 0;
+static Ecore_List *idle_enterers = NULL;
+static int idle_enterers_delete_me = 0;
+
+static void _ecore_idle_enterer_free(void *data);
/**
* Add an idle enterer handler.
@@ -21,9 +24,16 @@
ie = calloc(1, sizeof(Ecore_Idle_Enterer));
if (!ie) return NULL;
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
+
+ if(!idle_enterers)
+ {
+ idle_enterers = ecore_list_new();
+ ecore_list_set_free_cb(idle_enterers,
ECORE_FREE_CB(_ecore_idle_enterer_free));
+ }
+
ie->func = func;
ie->data = (void *)data;
- idle_enterers = _ecore_list2_append(idle_enterers, ie);
+ ecore_list_append(idle_enterers, (void *)ie);
return ie;
}
@@ -51,48 +61,47 @@
void
_ecore_idle_enterer_shutdown(void)
{
- while (idle_enterers)
- {
- Ecore_Idle_Enterer *ie;
-
- ie = idle_enterers;
- idle_enterers = _ecore_list2_remove(idle_enterers, ie);
- ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
- free(ie);
- }
+ if(idle_enterers)
+ ecore_list_destroy(idle_enterers);
+ idle_enterers = NULL;
idle_enterers_delete_me = 0;
}
+static void
+_ecore_idle_enterer_free(void *data)
+{
+ ECORE_MAGIC_SET((Ecore_Idle_Enterer *)data, ECORE_MAGIC_NONE);
+ free((Ecore_Idle_Enterer *)data);
+}
+
void
_ecore_idle_enterer_call(void)
{
- Ecore_List2 *l;
+ Ecore_Idle_Enterer *ie;
+
+ if(!idle_enterers)
+ return;
- for (l = (Ecore_List2 *)idle_enterers; l; l = l->next)
+ for (ie = (Ecore_Idle_Enterer *)ecore_list_goto_first(idle_enterers);
+ ie;
+ ie = (Ecore_Idle_Enterer *)ecore_list_next(idle_enterers))
{
- Ecore_Idle_Enterer *ie;
-
- ie = (Ecore_Idle_Enterer *)l;
- if (!ie->delete_me)
- {
- if (!ie->func(ie->data)) ecore_idle_enterer_del(ie);
- }
+ if (!ie->delete_me && !ie->func(ie->data))
+ ecore_idle_enterer_del(ie);
}
+
if (idle_enterers_delete_me)
{
- for (l = (Ecore_List2 *)idle_enterers; l;)
- {
- Ecore_Idle_Enterer *ie;
-
- ie = (Ecore_Idle_Enterer *)l;
- l = l->next;
+ for (ie = (Ecore_Idle_Enterer *)ecore_list_goto_first(idle_enterers);
ie;)
+ {
if (ie->delete_me)
- {
- idle_enterers = _ecore_list2_remove(idle_enterers, ie);
- ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
- free(ie);
- }
- }
+ {
+ ecore_list_remove_destroy(idle_enterers);
+ ie = (Ecore_Idle_Enterer *)ecore_list_current(idle_enterers);
+ }
+ else
+ ie = (Ecore_Idle_Enterer *)ecore_list_next(idle_enterers);
+ }
idle_enterers_delete_me = 0;
}
}
@@ -100,6 +109,6 @@
int
_ecore_idle_enterer_exist(void)
{
- if (idle_enterers) return 1;
+ if (idle_enterers && ecore_list_nodes(idle_enterers)) return 1;
return 0;
}
Index: ecore_idle_exiter.c
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_idle_exiter.c,v
retrieving revision 1.4
diff -u -r1.4 ecore_idle_exiter.c
--- ecore_idle_exiter.c 30 Aug 2005 10:05:26 -0000 1.4
+++ ecore_idle_exiter.c 2 Jan 2006 11:49:19 -0000
@@ -1,8 +1,11 @@
#include "ecore_private.h"
#include "Ecore.h"
+#include "Ecore_Data.h"
-static Ecore_Idle_Exiter *idle_exiters = NULL;
-static int idle_exiters_delete_me = 0;
+static Ecore_List *idle_exiters = NULL;
+static int idle_exiters_delete_me = 0;
+
+static void _ecore_idle_exiter_free(void *data);
/**
* Add an idle exiter handler.
@@ -20,9 +23,17 @@
ie = calloc(1, sizeof(Ecore_Idle_Exiter));
if (!ie) return NULL;
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER);
+
+ if(!idle_exiters)
+ {
+ idle_exiters = ecore_list_new();
+ if(!idle_exiters) return NULL;
+ ecore_list_set_free_cb(idle_exiters,
ECORE_FREE_CB(_ecore_idle_exiter_free));
+ }
+
ie->func = func;
ie->data = (void *)data;
- idle_exiters = _ecore_list2_append(idle_exiters, ie);
+ ecore_list_append(idle_exiters, (void *)ie);
return ie;
}
@@ -47,50 +58,49 @@
return idle_exiter->data;
}
+static void
+_ecore_idle_exiter_free(void *data)
+{
+ ECORE_MAGIC_SET((Ecore_Idle_Exiter *)data, ECORE_MAGIC_NONE);
+ free((Ecore_Idle_Exiter *)data);
+}
+
void
_ecore_idle_exiter_shutdown(void)
{
- while (idle_exiters)
- {
- Ecore_Idle_Exiter *ie;
-
- ie = idle_exiters;
- idle_exiters = _ecore_list2_remove(idle_exiters, ie);
- ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
- free(ie);
- }
+ if(idle_exiters)
+ ecore_list_destroy(idle_exiters);
+ idle_exiters = NULL;
idle_exiters_delete_me = 0;
}
void
_ecore_idle_exiter_call(void)
{
- Ecore_List2 *l;
+ Ecore_Idle_Exiter *ie;
+
+ if(!idle_exiters)
+ return;
- for (l = (Ecore_List2 *)idle_exiters; l; l = l->next)
+ for (ie = (Ecore_Idle_Exiter *)ecore_list_goto_first(idle_exiters);
+ ie;
+ ie = (Ecore_Idle_Exiter *)ecore_list_next(idle_exiters))
{
- Ecore_Idle_Exiter *ie;
-
- ie = (Ecore_Idle_Exiter *)l;
- if (!ie->delete_me)
- {
- if (!ie->func(ie->data)) ecore_idle_exiter_del(ie);
- }
+ if (!ie->delete_me && !ie->func(ie->data))
+ ecore_idle_exiter_del(ie);
}
+
if (idle_exiters_delete_me)
{
- for (l = (Ecore_List2 *)idle_exiters; l;)
+ for (ie = (Ecore_Idle_Exiter *)ecore_list_goto_first(idle_exiters); ie;)
{
- Ecore_Idle_Exiter *ie;
-
- ie = (Ecore_Idle_Exiter *)l;
- l = l->next;
if (ie->delete_me)
- {
- idle_exiters = _ecore_list2_remove(idle_exiters, ie);
- ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
- free(ie);
- }
+ {
+ ecore_list_remove_destroy(idle_exiters);
+ ie = (Ecore_Idle_Exiter *)ecore_list_current(idle_exiters);
+ }
+ else
+ ie = (Ecore_Idle_Exiter *)ecore_list_next(idle_exiters);
}
idle_exiters_delete_me = 0;
}
@@ -99,6 +109,6 @@
int
_ecore_idle_exiter_exist(void)
{
- if (idle_exiters) return 1;
+ if (idle_exiters && ecore_list_nodes(idle_exiters)) return 1;
return 0;
}
Index: ecore_idler.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_idler.c,v
retrieving revision 1.6
diff -u -r1.6 ecore_idler.c
--- ecore_idler.c 30 Aug 2005 10:05:26 -0000 1.6
+++ ecore_idler.c 2 Jan 2006 11:49:19 -0000
@@ -1,8 +1,11 @@
#include "ecore_private.h"
#include "Ecore.h"
+#include "Ecore_Data.h"
-static Ecore_Idler *idlers = NULL;
-static int idlers_delete_me = 0;
+static Ecore_List *idlers = NULL;
+static int idlers_delete_me = 0;
+
+static void _ecore_idler_free(void *data);
/**
* Add an idler handler.
@@ -20,9 +23,16 @@
ie = calloc(1, sizeof(Ecore_Idler));
if (!ie) return NULL;
ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLER);
+
+ if (!idlers)
+ {
+ idlers = ecore_list_new();
+ ecore_list_set_free_cb(idlers, ECORE_FREE_CB(_ecore_idler_free));
+ }
+
ie->func = func;
ie->data = (void *)data;
- idlers = _ecore_list2_append(idlers, ie);
+ ecore_list_append(idlers, (void *)ie);
return ie;
}
@@ -47,51 +57,50 @@
return idler->data;
}
+static void
+_ecore_idler_free(void *data)
+{
+ ECORE_MAGIC_SET((Ecore_Idler *)data, ECORE_MAGIC_NONE);
+ free((Ecore_Idler *)data);
+}
+
void
_ecore_idler_shutdown(void)
{
- while (idlers)
- {
- Ecore_Idler *ie;
-
- ie = idlers;
- idlers = _ecore_list2_remove(idlers, ie);
- ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
- free(ie);
- }
+ if(idlers)
+ ecore_list_destroy(idlers);
+ idlers = NULL;
idlers_delete_me = 0;
}
int
_ecore_idler_call(void)
{
- Ecore_List2 *l;
+ Ecore_Idler *ie;
- for (l = (Ecore_List2 *)idlers; l; l = l->next)
+ if(!idlers)
+ return 0;
+
+ for (ie = (Ecore_Idler *)ecore_list_goto_first(idlers);
+ ie;
+ ie = (Ecore_Idler *)ecore_list_next(idlers))
{
- Ecore_Idler *ie;
-
- ie = (Ecore_Idler *)l;
- if (!ie->delete_me)
- {
- if (!ie->func(ie->data)) ecore_idler_del(ie);
- }
+ if (!ie->delete_me && !ie->func(ie->data))
+ ecore_idler_del(ie);
}
+
if (idlers_delete_me)
{
- for (l = (Ecore_List2 *)idlers; l;)
- {
- Ecore_Idler *ie;
-
- ie = (Ecore_Idler *)l;
- l = l->next;
+ for (ie = (Ecore_Idler *)ecore_list_goto_first(idlers); ie;)
+ {
if (ie->delete_me)
- {
- idlers = _ecore_list2_remove(idlers, ie);
- ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
- free(ie);
- }
- }
+ {
+ ecore_list_remove_destroy(idlers);
+ ie = (Ecore_Idler *)ecore_list_current(idlers);
+ }
+ else
+ ie = (Ecore_Idler *)ecore_list_next(idlers);
+ }
idlers_delete_me = 0;
}
if (idlers) return 1;
@@ -101,6 +110,6 @@
int
_ecore_idler_exist(void)
{
- if (idlers) return 1;
+ if (idlers && ecore_list_nodes(idlers)) return 1;
return 0;
}
Index: ecore_list.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_list.c,v
retrieving revision 1.20
diff -u -r1.20 ecore_list.c
--- ecore_list.c 6 Sep 2005 21:00:55 -0000 1.20
+++ ecore_list.c 2 Jan 2006 11:49:19 -0000
@@ -57,104 +57,6 @@
}
void *
-_ecore_list2_prepend(void *in_list, void *in_item)
-{
- Ecore_List2 *new_l;
- Ecore_List2 *list, *item;
-
- list = in_list;
- item = in_item;
- new_l = item;
- new_l->prev = NULL;
- if (!list)
- {
- new_l->next = NULL;
- new_l->last = new_l;
- return new_l;
- }
- new_l->next = list;
- list->prev = new_l;
- new_l->last = list->last;
- list->last = NULL;
- return new_l;
-}
-
-void *
-_ecore_list2_append_relative(void *in_list, void *in_item, void *in_relative)
-{
- Ecore_List2 *l;
- Ecore_List2 *list, *item, *relative;
-
- list = in_list;
- item = in_item;
- relative = in_relative;
- for (l = list; l; l = l->next)
- {
- if (l == relative)
- {
- Ecore_List2 *new_l;
-
- new_l = item;
- if (l->next)
- {
- new_l->next = l->next;
- l->next->prev = new_l;
- }
-
- else new_l->next = NULL;
- l->next = new_l;
- new_l->prev = l;
- if (!new_l->next)
- list->last = new_l;
- return list;
- }
- }
- return _ecore_list2_append(list, item);
-}
-
-void *
-_ecore_list2_prepend_relative(void *in_list, void *in_item, void *in_relative)
-{
- Ecore_List2 *l;
- Ecore_List2 *list, *item, *relative;
-
- list = in_list;
- item = in_item;
- relative = in_relative;
- for (l = list; l; l = l->next)
- {
- if (l == relative)
- {
- Ecore_List2 *new_l;
-
- new_l = item;
- new_l->prev = l->prev;
- new_l->next = l;
- l->prev = new_l;
- if (new_l->prev)
- {
- new_l->prev->next = new_l;
- if (!new_l->next)
- list->last = new_l;
- return list;
- }
- else
- {
- if (!new_l->next)
- new_l->last = new_l;
- else
- {
- new_l->last = list->last;
- list->last = NULL;
- }
- return new_l;
- }
- }
- }
- return _ecore_list2_prepend(list, item);
-}
-
-void *
_ecore_list2_remove(void *in_list, void *in_item)
{
Ecore_List2 *return_l;
@@ -186,21 +88,6 @@
item->prev = NULL;
return return_l;
}
-
-void *
-_ecore_list2_find(void *in_list, void *in_item)
-{
- Ecore_List2 *l;
- Ecore_List2 *list, *item;
-
- list = in_list;
- item = in_item;
- for (l = list; l; l = l->next)
- {
- if (l == item) return item;
- }
- return NULL;
-}
/* XXX: End deprecated code */
/**
@@ -711,6 +598,9 @@
if (index > ecore_list_nodes(list) || index < 0)
return NULL;
+ if (index == list->index)
+ return list->current->data;
+
_ecore_list_goto_first(list);
for (i = 0; i < index && _ecore_list_next(list); i++);
Index: ecore_main.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_main.c,v
retrieving revision 1.21
diff -u -r1.21 ecore_main.c
--- ecore_main.c 19 Dec 2005 01:36:55 -0000 1.21
+++ ecore_main.c 2 Jan 2006 11:49:19 -0000
@@ -1,5 +1,6 @@
#include "ecore_private.h"
#include "Ecore.h"
+#include "Ecore_Data.h"
#ifdef WIN32
#include <winsock.h>
@@ -25,14 +26,15 @@
static void _ecore_main_fd_handlers_call(void);
static int _ecore_main_fd_handlers_buf_call(void);
static void _ecore_main_loop_iterate_internal(int once_only);
+static void _ecore_main_fd_free(void *data);
-static int in_main_loop = 0;
-static int do_quit = 0;
-static Ecore_Fd_Handler *fd_handlers = NULL;
-static int fd_handlers_delete_me = 0;
+static int in_main_loop = 0;
+static int do_quit = 0;
+static Ecore_List *fd_handlers = NULL;
+static int fd_handlers_delete_me = 0;
-static double t1 = 0.0;
-static double t2 = 0.0;
+static double t1 = 0.0;
+static double t2 = 0.0;
/**
* @defgroup Ecore_Main_Loop_Group Main Loop Functions
@@ -140,6 +142,13 @@
fdh = calloc(1, sizeof(Ecore_Fd_Handler));
if (!fdh) return NULL;
ECORE_MAGIC_SET(fdh, ECORE_MAGIC_FD_HANDLER);
+
+ if(!fd_handlers)
+ {
+ fd_handlers = ecore_list_new();
+ ecore_list_set_free_cb(fd_handlers, ECORE_FREE_CB(_ecore_main_fd_free));
+ }
+
fdh->fd = fd;
fdh->flags = flags;
fdh->read_active = 0;
@@ -150,7 +159,7 @@
fdh->data = (void *)data;
fdh->buf_func = buf_func;
fdh->buf_data = (void *)buf_data;
- fd_handlers = _ecore_list2_append(fd_handlers, fdh);
+ ecore_list_append(fd_handlers, fdh);
return fdh;
}
@@ -262,18 +271,17 @@
"*** Program may crash or behave strangely
now.\n");
return;
}
- while (fd_handlers)
- {
- Ecore_Fd_Handler *fdh;
-
- fdh = fd_handlers;
- fd_handlers = _ecore_list2_remove(fd_handlers, fdh);
- ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
- free(fdh);
- }
+ ecore_list_destroy(fd_handlers);
fd_handlers_delete_me = 0;
}
+void
+_ecore_main_fd_free(void *data)
+{
+ ECORE_MAGIC_SET((Ecore_Fd_Handler *)data, ECORE_MAGIC_NONE);
+ free((Ecore_Fd_Handler *)data);
+}
+
static int
_ecore_main_select(double timeout)
{
@@ -281,7 +289,9 @@
fd_set rfds, wfds, exfds;
int max_fd;
int ret;
- Ecore_List2 *l;
+
+ if(!fd_handlers)
+ return 0;
t = NULL;
if (timeout > 0.0)
@@ -312,20 +322,19 @@
FD_ZERO(&exfds);
/* call the prepare callback for all handlers */
- for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+ Ecore_Fd_Handler *fdh;
+ for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+ fdh;
+ fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
{
- Ecore_Fd_Handler *fdh;
-
- fdh = (Ecore_Fd_Handler *)l;
-
if (!fdh->delete_me && fdh->prep_func)
- fdh->prep_func (fdh->prep_data, fdh);
+ fdh->prep_func (fdh->prep_data, fdh);
}
- for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+
+ for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+ fdh;
+ fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
{
- Ecore_Fd_Handler *fdh;
-
- fdh = (Ecore_Fd_Handler *)l;
if (fdh->flags & ECORE_FD_READ)
{
FD_SET(fdh->fd, &rfds);
@@ -352,11 +361,10 @@
}
if (ret > 0)
{
- for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+ for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+ fdh;
+ fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
{
- Ecore_Fd_Handler *fdh;
-
- fdh = (Ecore_Fd_Handler *)l;
if (!fdh->delete_me)
{
if (FD_ISSET(fdh->fd, &rfds))
@@ -376,21 +384,21 @@
static void
_ecore_main_fd_handlers_cleanup(void)
{
- Ecore_List2 *l;
-
if (!fd_handlers_delete_me) return;
- for (l = (Ecore_List2 *)fd_handlers; l;)
+
+ Ecore_Fd_Handler *fdh;
+
+ for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+ fdh;)
{
- Ecore_Fd_Handler *fdh;
- fdh = (Ecore_Fd_Handler *)l;
- l = l->next;
if (fdh->delete_me)
- {
- fd_handlers = _ecore_list2_remove(fd_handlers, fdh);
- ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
- free(fdh);
- }
+ {
+ ecore_list_remove(fd_handlers);
+ fdh = (Ecore_Fd_Handler *)ecore_list_current(fd_handlers);
+ }
+ else
+ fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers);
}
fd_handlers_delete_me = 0;
}
@@ -398,13 +406,11 @@
static void
_ecore_main_fd_handlers_call(void)
{
- Ecore_List2 *l;
-
- for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+ Ecore_Fd_Handler *fdh;
+ for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+ fdh;
+ fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
{
- Ecore_Fd_Handler *fdh;
-
- fdh = (Ecore_Fd_Handler *)l;
if (!fdh->delete_me)
{
if ((fdh->read_active) ||
@@ -427,15 +433,14 @@
static int
_ecore_main_fd_handlers_buf_call(void)
{
- Ecore_List2 *l;
+ Ecore_Fd_Handler *fdh;
int ret;
ret = 0;
- for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+ for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+ fdh;
+ fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
{
- Ecore_Fd_Handler *fdh;
-
- fdh = (Ecore_Fd_Handler *)l;
if (!fdh->delete_me)
{
if (fdh->buf_func)
@@ -503,7 +508,7 @@
/* if these calls caused any biuffered events to appear - deal with them */
while (_ecore_main_fd_handlers_buf_call());
- /* if ther are any - jump to processing them */
+ /* if there are any - jump to processing them */
if (_ecore_event_exist())
{
int ret;
Index: ecore_private.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_private.h,v
retrieving revision 1.29
diff -u -r1.29 ecore_private.h
--- ecore_private.h 30 Dec 2005 19:17:21 -0000 1.29
+++ ecore_private.h 2 Jan 2006 11:49:19 -0000
@@ -197,7 +197,6 @@
struct _Ecore_Timer
{
- Ecore_List2 __list_data;
ECORE_MAGIC;
double in;
double at;
@@ -209,7 +208,6 @@
struct _Ecore_Idler
{
- Ecore_List2 __list_data;
ECORE_MAGIC;
int delete_me : 1;
int (*func) (void *data);
@@ -218,7 +216,6 @@
struct _Ecore_Idle_Enterer
{
- Ecore_List2 __list_data;
ECORE_MAGIC;
int delete_me : 1;
int (*func) (void *data);
@@ -227,7 +224,6 @@
struct _Ecore_Idle_Exiter
{
- Ecore_List2 __list_data;
ECORE_MAGIC;
int delete_me : 1;
int (*func) (void *data);
@@ -287,7 +283,6 @@
struct _Ecore_Animator
{
- Ecore_List2 __list_data;
ECORE_MAGIC;
signed char delete_me : 1;
int (*func) (void *data);
@@ -342,18 +337,14 @@
#ifndef WIN32
void _ecore_exe_shutdown(void);
Ecore_Exe *_ecore_exe_find(pid_t pid);
-void *_ecore_exe_free(Ecore_Exe *exe);
+void *_ecore_exe_del(Ecore_Exe *exe);
#endif
void _ecore_animator_shutdown(void);
EAPI void *_ecore_list2_append (void *in_list, void
*in_item);
-EAPI void *_ecore_list2_prepend (void *in_list, void
*in_item);
-EAPI void *_ecore_list2_append_relative (void *in_list, void
*in_item, void *in_relative);
-EAPI void *_ecore_list2_prepend_relative (void *in_list, void
*in_item, void *in_relative);
EAPI void *_ecore_list2_remove (void *in_list, void
*in_item);
-EAPI void *_ecore_list2_find (void *in_list, void
*in_item);
void _ecore_fps_debug_init(void);
void _ecore_fps_debug_shutdown(void);
Index: ecore_timer.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_timer.c,v
retrieving revision 1.14
diff -u -r1.14 ecore_timer.c
--- ecore_timer.c 11 Dec 2005 14:33:21 -0000 1.14
+++ ecore_timer.c 2 Jan 2006 11:49:19 -0000
@@ -1,11 +1,13 @@
#include "ecore_private.h"
#include "Ecore.h"
+#include "Ecore_Data.h"
-static void _ecore_timer_set(Ecore_Timer *timer, double at, double in, int
(*func) (void *data), void *data);
+static void _ecore_timer_set(Ecore_Timer *timer, double at, double in, int
(*func) (void *data), void *data);
+static void *_ecore_timer_del(void *t);
static int timers_added = 0;
static int timers_delete_me = 0;
-static Ecore_Timer *timers = NULL;
+static Ecore_DList *timers = NULL;
static double last_check = 0.0;
/**
@@ -83,36 +85,33 @@
}
void
+_ecore_timer_init(void)
+{
+ timers = ecore_dlist_new();
+ ecore_dlist_set_free_cb(timers, ECORE_FREE_CB(free));
+}
+
+void
_ecore_timer_shutdown(void)
{
- while (timers)
- {
- Ecore_Timer *timer;
-
- timer = timers;
- timers = _ecore_list2_remove(timers, timer);
- ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
- free(timer);
- }
+ if(timers)
+ ecore_dlist_destroy(timers);
}
void
_ecore_timer_cleanup(void)
{
- Ecore_List2 *l;
-
if (!timers_delete_me) return;
- for (l = (Ecore_List2 *)timers; l;)
+
+ Ecore_Timer *timer;
+
+ for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers);
+ timer;
+ timer = (Ecore_Timer *)ecore_dlist_next(timers))
{
- Ecore_Timer *timer;
-
- timer = (Ecore_Timer *)l;
- l = l->next;
if (timer->delete_me)
{
- timers = _ecore_list2_remove(timers, timer);
- ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
- free(timer);
+ ecore_dlist_remove_destroy(timers);
timers_delete_me--;
if (timers_delete_me == 0) return;
}
@@ -123,15 +122,13 @@
void
_ecore_timer_enable_new(void)
{
- Ecore_List2 *l;
-
if (!timers_added) return;
timers_added = 0;
- for (l = (Ecore_List2 *)timers; l; l = l->next)
+ Ecore_Timer *timer;
+ for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers);
+ timer;
+ timer = (Ecore_Timer *)ecore_dlist_next(timers))
{
- Ecore_Timer *timer;
-
- timer = (Ecore_Timer *)l;
timer->just_added = 0;
}
}
@@ -142,9 +139,9 @@
double now;
double in;
- if (!timers) return -1;
+ if (!ecore_dlist_goto_first(timers)) return -1;
now = ecore_time_get();
- in = timers->at - now;
+ in = ((Ecore_Timer *)ecore_dlist_current(timers))->at - now;
if (in < 0) in = 0;
return in;
}
@@ -152,28 +149,29 @@
int
_ecore_timer_call(double when)
{
- Ecore_List2 *l;
Ecore_Timer *timer;
- if (!timers) return 0;
+ if (!ecore_dlist_nodes(timers)) return 0;
if (last_check > when)
{
/* User set time backwards */
- for (l = (Ecore_List2 *)timers; l; l = l->next)
+ for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers);
+ timer;
+ timer = (Ecore_Timer *)ecore_dlist_next(timers))
{
- timer = (Ecore_Timer *)l;
timer->at -= (last_check - when);
}
}
last_check = when;
- for (l = (Ecore_List2 *)timers; l; l = l->next)
+ for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers);
+ timer;
+ timer = (Ecore_Timer *)ecore_dlist_next(timers))
{
- timer = (Ecore_Timer *)l;
if ((timer->at <= when) &&
(!timer->just_added) &&
(!timer->delete_me))
{
- timers = _ecore_list2_remove(timers, timer);
+ ecore_dlist_remove(timers);
_ecore_timer_call(when);
if ((!timer->delete_me) && (timer->func(timer->data)))
{
@@ -202,27 +200,26 @@
static void
_ecore_timer_set(Ecore_Timer *timer, double at, double in, int (*func) (void
*data), void *data)
{
- Ecore_List2 *l;
-
timers_added = 1;
timer->at = at;
timer->in = in;
timer->func = func;
timer->data = data;
timer->just_added = 1;
- if (timers)
+ if (!timers) _ecore_timer_init();
{
- for (l = ((Ecore_List2 *)(timers))->last; l; l = l->prev)
- {
- Ecore_Timer *t2;
-
- t2 = (Ecore_Timer *)l;
+ Ecore_Timer *t2;
+ for (t2 = (Ecore_Timer *)ecore_dlist_goto_last(timers);
+ t2;
+ t2 = (Ecore_Timer *)ecore_dlist_previous(timers))
+ {
if (timer->at > t2->at)
- {
- timers = _ecore_list2_append_relative(timers, timer, t2);
+ {
+ ecore_dlist_previous(timers);
+ ecore_dlist_insert(timers, (void *)timer);
return;
- }
- }
+ }
+ }
}
- timers = _ecore_list2_prepend(timers, timer);
+ ecore_dlist_prepend(timers, (void *)timer);
}