diff options
author | 2017-03-09 17:06:35 +0000 | |
---|---|---|
committer | 2017-03-09 17:06:35 +0000 | |
commit | 5a2245e359c95a30bd17d374817497c69b65243d (patch) | |
tree | 1f41d7b89bb581889d007e40c5dc8ada608a866c /usr.bin/tmux/server-client.c | |
parent | Move server_fill_environ into environ.c and move some other common code (diff) | |
download | wireguard-openbsd-5a2245e359c95a30bd17d374817497c69b65243d.tar.xz wireguard-openbsd-5a2245e359c95a30bd17d374817497c69b65243d.zip |
Move the client identify (display-panes) code into server-client.c.
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r-- | usr.bin/tmux/server-client.c | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index adaa332991b..bc36547bc30 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.213 2017/02/14 18:13:05 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.214 2017/03/09 17:06:35 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -49,6 +49,49 @@ static void server_client_dispatch_command(struct client *, struct imsg *); static void server_client_dispatch_identify(struct client *, struct imsg *); static void server_client_dispatch_shell(struct client *); +/* Idenfity mode callback. */ +static void +server_client_callback_identify(__unused int fd, __unused short events, void *data) +{ + server_client_clear_identify(data, NULL); +} + +/* Set identify mode on client. */ +void +server_client_set_identify(struct client *c) +{ + struct timeval tv; + int delay; + + delay = options_get_number(c->session->options, "display-panes-time"); + tv.tv_sec = delay / 1000; + tv.tv_usec = (delay % 1000) * 1000L; + + if (event_initialized(&c->identify_timer)) + evtimer_del(&c->identify_timer); + evtimer_set(&c->identify_timer, server_client_callback_identify, c); + evtimer_add(&c->identify_timer, &tv); + + c->flags |= CLIENT_IDENTIFY; + c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR); + server_redraw_client(c); +} + +/* Clear identify mode on client. */ +void +server_client_clear_identify(struct client *c, struct window_pane *wp) +{ + if (~c->flags & CLIENT_IDENTIFY) + return; + c->flags &= ~CLIENT_IDENTIFY; + + if (c->identify_callback != NULL) + c->identify_callback(c, wp); + + c->tty.flags &= ~(TTY_FREEZE|TTY_NOCURSOR); + server_redraw_client(c); +} + /* Check if this client is inside this server. */ int server_client_check_nested(struct client *c) @@ -192,7 +235,7 @@ server_client_lost(struct client *c) c->flags |= CLIENT_DEAD; - server_clear_identify(c, NULL); + server_client_clear_identify(c, NULL); status_prompt_clear(c); status_message_clear(c); @@ -760,14 +803,14 @@ server_client_handle_key(struct client *c, key_code key) wp = window_pane_at_index(w, key - '0'); if (wp != NULL && !window_pane_visible(wp)) wp = NULL; - server_clear_identify(c, wp); + server_client_clear_identify(c, wp); return; } /* Handle status line. */ if (!(c->flags & CLIENT_READONLY)) { status_message_clear(c); - server_clear_identify(c, NULL); + server_client_clear_identify(c, NULL); } if (c->prompt_string != NULL) { if (c->flags & CLIENT_READONLY) |