Mercurial > emacs
diff src/xmenu.c @ 105936:45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
* keyboard.h: Declare timer_check.
* keyboard.c (timer_check_2): New function that does what the old
timer_check did.
(timer_check): Call timer_check_2 until -1 or a non-zero time is
returned, i.e. don't return -1 with timers pending.
* process.c: Remove extern declaration of timer_check.
* xmenu.c (x_menu_wait_for_event): Remove code that did a timeout
even if timer_check returned -1.
* gtkutil.c (xg_dialog_response_cb): data is now a struct xg_dialog_data
(pop_down_dialog): Destroy widget (if any), cancel timer and unref
the event loop.
(xg_maybe_add_timer, xg_dialog_run): New functions (bug #4574).
(xg_get_file_name, xg_get_font_name): Call xg_dialog_run (bug #4574).
Destroy the dialog after xg_dialog_run.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Tue, 10 Nov 2009 19:06:40 +0000 |
parents | a5db20cb0a5a |
children | b3bd00b680bb |
line wrap: on
line diff
--- a/src/xmenu.c Tue Nov 10 18:07:09 2009 +0000 +++ b/src/xmenu.c Tue Nov 10 19:06:40 2009 +0000 @@ -405,8 +405,6 @@ void x_menu_wait_for_event (void *data) { - extern EMACS_TIME timer_check P_ ((int)); - /* Another way to do this is to register a timer callback, that can be done in GTK and Xt. But we have to do it like this when using only X anyway, and with callbacks we would have three variants for timer handling @@ -422,7 +420,7 @@ #endif ) { - EMACS_TIME next_time = timer_check (1); + EMACS_TIME next_time = timer_check (1), *ntp; long secs = EMACS_SECS (next_time); long usecs = EMACS_USECS (next_time); SELECT_TYPE read_fds; @@ -437,15 +435,12 @@ if (fd > n) n = fd; } - if (secs < 0 || (secs == 0 && usecs == 0)) - { - /* Sometimes timer_check returns -1 (no timers) even if there are - timers. So do a timeout anyway. */ - EMACS_SET_SECS (next_time, 1); - EMACS_SET_USECS (next_time, 0); - } - - select (n + 1, &read_fds, (SELECT_TYPE *)0, (SELECT_TYPE *)0, &next_time); + if (secs < 0 && usecs < 0) + ntp = 0; + else + ntp = &next_time; + + select (n + 1, &read_fds, (SELECT_TYPE *)0, (SELECT_TYPE *)0, ntp); } } #endif /* ! MSDOS */