aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-02-17 10:12:55 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-02-17 10:12:55 +0000
commit3d9fd1c7f2724b887ec6d2ea07edf3bf70385d75 (patch)
treeeb34a09ead49303088a460858a768dbdcb98996a
parentd1e8fb33dab9d2ed2888263d98da1e8d12a4e4e5 (diff)
downloadrtmux-3d9fd1c7f2724b887ec6d2ea07edf3bf70385d75.tar.gz
rtmux-3d9fd1c7f2724b887ec6d2ea07edf3bf70385d75.tar.bz2
rtmux-3d9fd1c7f2724b887ec6d2ea07edf3bf70385d75.zip
Add various checks to turn off bits that can't work in control mode (such as
lock).
-rw-r--r--server-client.c13
-rw-r--r--server-fn.c3
-rw-r--r--server-window.c4
3 files changed, 15 insertions, 5 deletions
diff --git a/server-client.c b/server-client.c
index e683a206..e7c117f2 100644
--- a/server-client.c
+++ b/server-client.c
@@ -355,6 +355,7 @@ server_client_handle_key(struct client *c, int key)
/* Check the client is good to accept input. */
if ((c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0)
return;
+
if (c->session == NULL)
return;
s = c->session;
@@ -528,6 +529,9 @@ server_client_reset_state(struct client *c)
if (c->flags & CLIENT_SUSPENDED)
return;
+ if (c->flags & CLIENT_CONTROL)
+ return;
+
tty_region(&c->tty, 0, c->tty.sy - 1);
status = options_get_number(oo, "status");
@@ -625,7 +629,7 @@ server_client_check_redraw(struct client *c)
struct window_pane *wp;
int flags, redraw;
- if (c->flags & CLIENT_SUSPENDED)
+ if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
return;
flags = c->tty.flags & TTY_FREEZE;
@@ -755,6 +759,8 @@ server_client_msg_dispatch(struct client *c)
if (datalen != 0)
fatalx("bad MSG_RESIZE size");
+ if (c->flags & CLIENT_CONTROL)
+ break;
if (tty_resize(&c->tty)) {
recalculate_sizes();
server_redraw_client(c);
@@ -924,7 +930,7 @@ server_client_msg_identify(
if (data->flags & IDENTIFY_CONTROL) {
c->stdin_callback = control_callback;
- c->flags |= (CLIENT_CONTROL|CLIENT_SUSPENDED);
+ c->flags |= CLIENT_CONTROL;
server_write_client(c, MSG_STDIN, NULL, 0);
c->tty.fd = -1;
@@ -949,7 +955,8 @@ server_client_msg_identify(
tty_resize(&c->tty);
- c->flags |= CLIENT_TERMINAL;
+ if (!(data->flags & IDENTIFY_CONTROL))
+ c->flags |= CLIENT_TERMINAL;
}
/* Handle shell message. */
diff --git a/server-fn.c b/server-fn.c
index b21d94a1..87811c15 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -239,6 +239,9 @@ server_lock_client(struct client *c)
size_t cmdlen;
struct msg_lock_data lockdata;
+ if (!(c->flags & CLIENT_CONTROL))
+ return;
+
if (c->flags & CLIENT_SUSPENDED)
return;
diff --git a/server-window.c b/server-window.c
index fce6439b..4f5a5504 100644
--- a/server-window.c
+++ b/server-window.c
@@ -85,7 +85,7 @@ server_window_check_bell(struct session *s, struct winlink *wl)
return (0);
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
c = ARRAY_ITEM(&clients, i);
- if (c == NULL || c->session != s)
+ if (c == NULL || c->session != s || (c->flags & CLIENT_CONTROL))
continue;
if (!visual) {
tty_bell(&c->tty);
@@ -242,7 +242,7 @@ ring_bell(struct session *s)
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
c = ARRAY_ITEM(&clients, i);
- if (c != NULL && c->session == s)
+ if (c != NULL && c->session == s && !(c->flags & CLIENT_CONTROL))
tty_bell(&c->tty);
}
}