/* Internal inactivity timer. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "elinks.h" #include "config/kbdbind.h" #include "config/options.h" #include "intl/libintl.h" #include "main/module.h" #include "main/timer.h" #include "terminal/event.h" #include "terminal/kbd.h" #include "terminal/terminal.h" #include "util/time.h" #include "viewer/timer.h" #define COUNT_DOWN_DELAY ((milliseconds_T) 1000) static timer_id_T countdown = TIMER_ID_UNDEF; static int timer_duration = 0; int get_timer_duration(void) { return timer_duration; } /* Timer callback for @countdown. As explained in @install_timer, * this function must erase the expired timer ID from all variables. */ static void count_down(void *xxx) { struct keybinding *keybinding; timer_duration--; if (timer_duration) { install_timer(&countdown, COUNT_DOWN_DELAY, count_down, NULL); return; } else { countdown = TIMER_ID_UNDEF; } /* The expired timer ID has now been erased. */ keybinding = kbd_nm_lookup(KEYMAP_MAIN, get_opt_str("ui.timer.action", NULL)); if (keybinding) { struct terminal *terminal; struct term_event ev; set_kbd_term_event(&ev, keybinding->kbd.key, keybinding->kbd.modifier); foreach (terminal, terminals) { term_send_event(terminal, &ev); } } reset_timer(); } void reset_timer(void) { kill_timer(&countdown); if (!get_opt_int("ui.timer.enable", NULL)) return; timer_duration = get_opt_int("ui.timer.duration", NULL); install_timer(&countdown, COUNT_DOWN_DELAY, count_down, NULL); } static void init_timer(struct module *module) { reset_timer(); } static void done_timer(struct module *module) { kill_timer(&countdown); } struct module timer_module = struct_module( /* name: */ N_("Timer"), /* options: */ NULL, /* hooks: */ NULL, /* submodules: */ NULL, /* data: */ NULL, /* init: */ init_timer, /* done: */ done_timer );