diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index 6bd7d592dd..466e0de851 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -263,3 +263,9 @@ 2011-07-22 Mike Blumenkrantz * Added ecore_con_url_url_get + +2011-07-26 Carsten Haitzler (The Rasterman) + + * Fix timer precision handling for grouping timer ticks so + they actually do tick off together + diff --git a/legacy/ecore/src/lib/ecore/ecore_timer.c b/legacy/ecore/src/lib/ecore/ecore_timer.c index 2c4a2231aa..a4bc1a441c 100644 --- a/legacy/ecore/src/lib/ecore/ecore_timer.c +++ b/legacy/ecore/src/lib/ecore/ecore_timer.c @@ -590,15 +590,17 @@ static inline Ecore_Timer * _ecore_timer_after_get(Ecore_Timer *base) { Ecore_Timer *timer = (Ecore_Timer *) EINA_INLIST_GET(base)->next; + Ecore_Timer *valid_timer = NULL; double maxtime = base->at + precision; - while ((timer) && ((timer->delete_me) || (timer->just_added)) && (timer->at <= maxtime)) - timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next; + while ((timer) && (timer->at < maxtime)) + { + if (!((timer->delete_me) || (timer->just_added))) + valid_timer = timer; + timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next; + } - if ((!timer) || (timer->at > maxtime)) - return NULL; - - return timer; + return valid_timer; } double @@ -612,8 +614,7 @@ _ecore_timer_next_get(void) if (!first) return -1; second = _ecore_timer_after_get(first); - if (second) - first = second; + if (second) first = second; now = ecore_loop_time_get(); in = first->at - now;