Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore
Modified Files:
Tag: SPLIT
ecore_private.h ecore_timer.c
Log Message:
demo is looking a litle nicer... :)
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/ecore_private.h,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -3 -r1.1.2.9 -r1.1.2.10
--- ecore_private.h 20 Feb 2003 06:56:40 -0000 1.1.2.9
+++ ecore_private.h 23 Feb 2003 02:00:56 -0000 1.1.2.10
@@ -65,6 +65,7 @@
ECORE_MAGIC;
double in;
double at;
+ char just_added : 1;
int (*func) (void *data);
void *data;
};
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/ecore_timer.c,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -3 -r1.1.2.5 -r1.1.2.6
--- ecore_timer.c 20 Feb 2003 06:56:40 -0000 1.1.2.5
+++ ecore_timer.c 23 Feb 2003 02:00:57 -0000 1.1.2.6
@@ -78,10 +78,18 @@
double
_ecore_timer_next_get(void)
{
+ Ecore_List *l;
double now;
double in;
if (!timers) return -1;
+ for (l = (Ecore_List *)timers; l; l = l->next)
+ {
+ Ecore_Timer *timer;
+
+ timer = (Ecore_Timer *)l;
+ timer->just_added = 0;
+ }
now = ecore_time_get();
in = timers->at - now;
if (in < 0) in = 0;
@@ -91,18 +99,26 @@
int
_ecore_timer_call(double when)
{
+ Ecore_List *l;
Ecore_Timer *timer;
if (!timers) return 0;
- if (timers->at > when) return 0;
- timer = timers;
- timers = _ecore_list_remove(timers, timer);
- _ecore_timer_call(when);
- if (timer->func(timer->data))
- _ecore_timer_set(timer, timer->at + timer->in, timer->in, timer->func,
timer->data);
- else
- free(timer);
- return 1;
+ for (l = (Ecore_List *)timers; l; l = l->next)
+ {
+ timer = (Ecore_Timer *)l;
+ if ((timer->at <= when) &&
+ (!timer->just_added))
+ {
+ timers = _ecore_list_remove(timers, timer);
+ _ecore_timer_call(when);
+ if (timer->func(timer->data))
+ _ecore_timer_set(timer, timer->at + timer->in, timer->in, timer->func,
timer->data);
+ else
+ free(timer);
+ return 1;
+ }
+ }
+ return 0;
}
static void
@@ -114,6 +130,7 @@
timer->in = in;
timer->func = func;
timer->data = data;
+ timer->just_added = 1;
if (timers)
{
for (l = ((Ecore_List *)(timers))->last; l; l = l->prev)
-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs