Enlightenment CVS committal Author : raster Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore Modified Files: Tag: SPLIT Ecore.h ecore_main.c Log Message: we have a main loop iteration call now :) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/Ecore.h,v retrieving revision 1.1.2.8 retrieving revision 1.1.2.9 diff -u -3 -r1.1.2.8 -r1.1.2.9 --- Ecore.h 8 Jul 2003 04:26:08 -0000 1.1.2.8 +++ Ecore.h 8 Sep 2003 03:05:18 -0000 1.1.2.9 @@ -109,7 +109,8 @@ Ecore_Idle_Enterer *ecore_idle_enterer_add(int (*func) (void *data), const void *data); void *ecore_idle_enterer_del(Ecore_Idle_Enterer *idle_enterer); - + + void ecore_main_loop_interate(void); void ecore_main_loop_begin(void); void ecore_main_loop_quit(void); Ecore_Fd_Handler *ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, int (*func) (void *data, Ecore_Fd_Handler *fd_handler), const void *data, int (*buf_func) (void *buf_data, Ecore_Fd_Handler *fd_handler), const void *buf_data); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/ecore_main.c,v retrieving revision 1.1.2.13 retrieving revision 1.1.2.14 diff -u -3 -r1.1.2.13 -r1.1.2.14 --- ecore_main.c 19 Jun 2003 13:00:00 -0000 1.1.2.13 +++ ecore_main.c 8 Sep 2003 03:05:18 -0000 1.1.2.14 @@ -9,7 +9,8 @@ static int _ecore_main_select(double timeout); static void _ecore_main_fd_handlers_cleanup(void); static void _ecore_main_fd_handlers_call(void); -static int _ecore_main_fd_handlers_buf_call(void); +static int _ecore_main_fd_handlers_buf_call(void); +static void _ecore_main_loop_interate_internal(int once_only); static int in_main_loop = 0; static int do_quit = 0; @@ -17,6 +18,19 @@ static int fd_handlers_delete_me = 0; /** + * Run 1 iteration of the main loop and process everything on the queue. + * + * This function Processes 1 iteration of the main loop, handling anything on + * the queue. See ecore_main_loop_begin() for more information. + * <hr><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> + */ +void +ecore_main_loop_interate(void) +{ + _ecore_main_loop_interate_internal(1); +} + +/** * Run the application main loop. * * This function does not return until ecore_main_loop_quit() is called. It @@ -28,129 +42,10 @@ void ecore_main_loop_begin(void) { - in_main_loop = 1; - for (;do_quit == 0;) - { - double next_time; - int have_event; - int have_signal; - - /* expire any timers */ - { - double now; - - now = ecore_time_get(); - while (_ecore_timer_call(now)); - _ecore_timer_cleanup(); - } - /* any timers re-added as a result of these are allowed to go */ - _ecore_timer_enable_new(); - /* process signals into events .... */ - while (_ecore_signal_count_get()) _ecore_signal_call(); - if (_ecore_event_exist()) - { - have_event = 1; - have_signal = 1; - goto process_events; - } - /* call idle enterers ... */ - _ecore_idle_enterer_call(); - /* 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 (_ecore_event_exist()) - { - have_event = 1; - have_signal = 1; - goto process_events; - } - - start_loop: - /* init flags */ - have_event = have_signal = 0; - next_time = _ecore_timer_next_get(); - /* no timers */ - if (next_time < 0) - { - /* no idlers */ - if (!_ecore_idler_exist()) - { - int ret; - - ret = _ecore_main_select(-1); - if (ret > 0) have_event = 1; - if (_ecore_signal_count_get() > 0) have_signal = 1; - } - /* idlers */ - else - { - for (;;) - { - int ret; - - if (!_ecore_idler_call()) goto start_loop; - if (_ecore_event_exist()) break; - ret = _ecore_main_select(0); - if (ret > 0) have_event = 1; - if (_ecore_signal_count_get() > 0) have_signal = 1; - if (have_event || have_signal) break; - next_time = _ecore_timer_next_get(); - if (next_time >= 0) goto start_loop; - } - } - } - /* timers */ - else - { - /* no idlers */ - if (!_ecore_idler_exist()) - { - int ret; - - ret = _ecore_main_select(next_time); - if (ret > 0) have_event = 1; - if (_ecore_signal_count_get() > 0) have_signal = 1; - } - /* idlers */ - else - { - for (;;) - { - double cur_time, t; - int ret; - - if (!_ecore_idler_call()) goto start_loop; - if (_ecore_event_exist()) break; - ret = _ecore_main_select(0); - if (ret > 0) have_event = 1; - if (_ecore_signal_count_get() > 0) have_signal = 1; - if ((have_event) || (have_signal)) break; - cur_time = ecore_time_get(); - t = ecore_time_get() - cur_time; - if (t >= next_time) break; - next_time = _ecore_timer_next_get(); - if (next_time < 0) goto start_loop; - } - } - } - /* call the fd handler per fd that became alive... */ - /* this should read or write any data to the monitored fd and then */ - /* post events onto the ecore event pipe if necessary */ - process_events: - if (have_event) _ecore_main_fd_handlers_call(); - do - { - /* process signals into events .... */ - while (_ecore_signal_count_get()) _ecore_signal_call(); - - /* handle events ... */ - _ecore_event_call(); - _ecore_main_fd_handlers_cleanup(); - } - while (_ecore_main_fd_handlers_buf_call()); - } + in_main_loop++; + for (;do_quit == 0;) _ecore_main_loop_interate_internal(0); do_quit = 0; - in_main_loop = 0; + in_main_loop--; } /** @@ -481,4 +376,129 @@ } } return ret; +} + +static void +_ecore_main_loop_interate_internal(int once_only) +{ + double next_time; + int have_event; + int have_signal; + + in_main_loop++; + /* expire any timers */ + { + double now; + + now = ecore_time_get(); + while (_ecore_timer_call(now)); + _ecore_timer_cleanup(); + } + /* any timers re-added as a result of these are allowed to go */ + _ecore_timer_enable_new(); + /* process signals into events .... */ + while (_ecore_signal_count_get()) _ecore_signal_call(); + if (_ecore_event_exist()) + { + have_event = 1; + have_signal = 1; + goto process_events; + } + /* call idle enterers ... */ + _ecore_idle_enterer_call(); + /* 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 (_ecore_event_exist()) + { + have_event = 1; + have_signal = 1; + goto process_events; + } + if (once_only) return; + + start_loop: + /* init flags */ + have_event = have_signal = 0; + next_time = _ecore_timer_next_get(); + /* no timers */ + if (next_time < 0) + { + /* no idlers */ + if (!_ecore_idler_exist()) + { + int ret; + + ret = _ecore_main_select(-1); + if (ret > 0) have_event = 1; + if (_ecore_signal_count_get() > 0) have_signal = 1; + } + /* idlers */ + else + { + for (;;) + { + int ret; + + if (!_ecore_idler_call()) goto start_loop; + if (_ecore_event_exist()) break; + ret = _ecore_main_select(0); + if (ret > 0) have_event = 1; + if (_ecore_signal_count_get() > 0) have_signal = 1; + if (have_event || have_signal) break; + next_time = _ecore_timer_next_get(); + if (next_time >= 0) goto start_loop; + } + } + } + /* timers */ + else + { + /* no idlers */ + if (!_ecore_idler_exist()) + { + int ret; + + ret = _ecore_main_select(next_time); + if (ret > 0) have_event = 1; + if (_ecore_signal_count_get() > 0) have_signal = 1; + } + /* idlers */ + else + { + for (;;) + { + double cur_time, t; + int ret; + + if (!_ecore_idler_call()) goto start_loop; + if (_ecore_event_exist()) break; + ret = _ecore_main_select(0); + if (ret > 0) have_event = 1; + if (_ecore_signal_count_get() > 0) have_signal = 1; + if ((have_event) || (have_signal)) break; + cur_time = ecore_time_get(); + t = ecore_time_get() - cur_time; + if (t >= next_time) break; + next_time = _ecore_timer_next_get(); + if (next_time < 0) goto start_loop; + } + } + } + /* call the fd handler per fd that became alive... */ + /* this should read or write any data to the monitored fd and then */ + /* post events onto the ecore event pipe if necessary */ + process_events: + if (have_event) _ecore_main_fd_handlers_call(); + do + { + /* process signals into events .... */ + while (_ecore_signal_count_get()) _ecore_signal_call(); + + /* handle events ... */ + _ecore_event_call(); + _ecore_main_fd_handlers_cleanup(); + } + while (_ecore_main_fd_handlers_buf_call()); + in_main_loop--; } ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs