1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-21 00:25:37 +00:00
elinks/src/viewer/timer.c
Witold Filipczyk 66305fcb50 [gettext] try system gettext. Refs #62
Now, only meson was changed.
-Dnls=true -Dgettext=true
2021-08-08 21:25:08 +02:00

97 lines
1.9 KiB
C

/* 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
);