diff options
author | nicm <nicm> | 2015-08-28 12:25:42 +0000 |
---|---|---|
committer | nicm <nicm> | 2015-08-28 12:25:42 +0000 |
commit | 6419f665237d4280966c298a38836b53746b8dcc (patch) | |
tree | 4f48104a789fea060ddb9b44fa91e3a6c21712f6 | |
parent | 75d10058a41d8e95dda126d460a119a9037e9345 (diff) | |
download | rtmux-6419f665237d4280966c298a38836b53746b8dcc.tar.gz rtmux-6419f665237d4280966c298a38836b53746b8dcc.tar.bz2 rtmux-6419f665237d4280966c298a38836b53746b8dcc.zip |
Give clock mode its own timer.
-rw-r--r-- | server.c | 9 | ||||
-rw-r--r-- | tmux.h | 1 | ||||
-rw-r--r-- | window-choose.c | 1 | ||||
-rw-r--r-- | window-clock.c | 50 | ||||
-rw-r--r-- | window-copy.c | 1 |
5 files changed, 30 insertions, 32 deletions
@@ -504,8 +504,6 @@ server_child_stopped(pid_t pid, int status) void server_second_callback(unused int fd, unused short events, unused void *arg) { - struct window *w; - struct window_pane *wp; struct timeval tv; if (options_get_number(&global_s_options, "lock-server")) @@ -513,13 +511,6 @@ server_second_callback(unused int fd, unused short events, unused void *arg) else server_lock_sessions(); - RB_FOREACH(w, windows, &windows) { - TAILQ_FOREACH(wp, &w->panes, entry) { - if (wp->mode != NULL && wp->mode->timer != NULL) - wp->mode->timer(wp); - } - } - evtimer_del(&server_ev_second); memset(&tv, 0, sizeof tv); tv.tv_sec = 1; @@ -777,7 +777,6 @@ struct window_mode { void (*resize)(struct window_pane *, u_int, u_int); void (*key)(struct window_pane *, struct client *, struct session *, int, struct mouse_event *); - void (*timer)(struct window_pane *); }; /* Structures for choose mode. */ diff --git a/window-choose.c b/window-choose.c index c71fea3d..37baf0d7 100644 --- a/window-choose.c +++ b/window-choose.c @@ -57,7 +57,6 @@ const struct window_mode window_choose_mode = { window_choose_free, window_choose_resize, window_choose_key, - NULL, }; struct window_choose_mode_item { diff --git a/window-clock.c b/window-clock.c index 3cabd9e9..4a497891 100644 --- a/window-clock.c +++ b/window-clock.c @@ -29,8 +29,8 @@ void window_clock_free(struct window_pane *); void window_clock_resize(struct window_pane *, u_int, u_int); void window_clock_key(struct window_pane *, struct client *, struct session *, int, struct mouse_event *); -void window_clock_timer(struct window_pane *); +void window_clock_timer_callback(int, short, void *); void window_clock_draw_screen(struct window_pane *); const struct window_mode window_clock_mode = { @@ -38,12 +38,12 @@ const struct window_mode window_clock_mode = { window_clock_free, window_clock_resize, window_clock_key, - window_clock_timer, }; struct window_clock_mode_data { struct screen screen; time_t tim; + struct event timer; }; const char window_clock_table[14][5][5] = { @@ -119,15 +119,42 @@ const char window_clock_table[14][5][5] = { { 1,0,0,0,1 } }, }; +void +window_clock_timer_callback(unused int fd, unused short events, void *arg) +{ + struct window_pane *wp = arg; + struct window_clock_mode_data *data = wp->modedata; + struct tm now, then; + time_t t; + struct timeval tv = { .tv_sec = 1 }; + + evtimer_del(&data->timer); + evtimer_add(&data->timer, &tv); + + t = time(NULL); + gmtime_r(&t, &now); + gmtime_r(&data->tim, &then); + if (now.tm_min == then.tm_min) + return; + data->tim = t; + + window_clock_draw_screen(wp); + server_redraw_window(wp->window); +} + struct screen * window_clock_init(struct window_pane *wp) { struct window_clock_mode_data *data; struct screen *s; + struct timeval tv = { .tv_sec = 1 }; wp->modedata = data = xmalloc(sizeof *data); data->tim = time(NULL); + evtimer_set(&data->timer, window_clock_timer_callback, wp); + evtimer_add(&data->timer, &tv); + s = &data->screen; screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); s->mode &= ~MODE_CURSOR; @@ -142,6 +169,7 @@ window_clock_free(struct window_pane *wp) { struct window_clock_mode_data *data = wp->modedata; + evtimer_del(&data->timer); screen_free(&data->screen); free(data); } @@ -164,24 +192,6 @@ window_clock_key(struct window_pane *wp, unused struct client *c, } void -window_clock_timer(struct window_pane *wp) -{ - struct window_clock_mode_data *data = wp->modedata; - struct tm now, then; - time_t t; - - t = time(NULL); - gmtime_r(&t, &now); - gmtime_r(&data->tim, &then); - if (now.tm_min == then.tm_min) - return; - data->tim = t; - - window_clock_draw_screen(wp); - server_redraw_window(wp->window); -} - -void window_clock_draw_screen(struct window_pane *wp) { struct window_clock_mode_data *data = wp->modedata; diff --git a/window-copy.c b/window-copy.c index 7d5bae4c..850b437a 100644 --- a/window-copy.c +++ b/window-copy.c @@ -91,7 +91,6 @@ const struct window_mode window_copy_mode = { window_copy_free, window_copy_resize, window_copy_key, - NULL, }; enum window_copy_input_type { |