summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/server-client.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2015-10-26 23:16:18 +0000
committernicm <nicm@openbsd.org>2015-10-26 23:16:18 +0000
commita8e46e1c37e1d163d3d5316251f983e4f3f06489 (patch)
tree6ca8fdbfd60387ea5bb78611b868f44b3d2c67d0 /usr.bin/tmux/server-client.c
parentDefault bindings for mouse wheel on status line to change window (like (diff)
downloadwireguard-openbsd-a8e46e1c37e1d163d3d5316251f983e4f3f06489.tar.xz
wireguard-openbsd-a8e46e1c37e1d163d3d5316251f983e4f3f06489.zip
If a mouse event has no key binding, pass it through to the pane it
happened in, not the active pane like normal key presses. Fixes problems seen by Enrico Ghirardi.
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r--usr.bin/tmux/server-client.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c
index 67028ee10b7..a5c1fd662a5 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.160 2015/10/26 17:17:06 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.161 2015/10/26 23:16:18 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -551,7 +551,6 @@ server_client_handle_key(struct client *c, int key)
if (s == NULL || (c->flags & (CLIENT_DEAD|CLIENT_SUSPENDED)) != 0)
return;
w = s->curw->window;
- wp = w->active;
/* Update the activity timer. */
if (gettimeofday(&c->activity_time, NULL) != 0)
@@ -592,19 +591,14 @@ server_client_handle_key(struct client *c, int key)
m->valid = 1;
m->key = key;
- if (!options_get_number(&s->options, "mouse")) {
- window_pane_key(wp, c, s, key, m);
- return;
- }
+ if (!options_get_number(&s->options, "mouse"))
+ goto forward;
} else
m->valid = 0;
/* Treat everything as a regular key when pasting is detected. */
- if (!KEYC_IS_MOUSE(key) && server_client_assume_paste(s)) {
- if (!(c->flags & CLIENT_READONLY))
- window_pane_key(wp, c, s, key, m);
- return;
- }
+ if (!KEYC_IS_MOUSE(key) && server_client_assume_paste(s))
+ goto forward;
retry:
/* Try to see if there is a key binding in the current table. */
@@ -680,7 +674,17 @@ retry:
key == options_get_number(&s->options, "prefix2")) {
server_client_key_table(c, "prefix");
server_status_client(c);
- } else if (!(c->flags & CLIENT_READONLY))
+ return;
+ }
+
+forward:
+ if (c->flags & CLIENT_READONLY)
+ return;
+ if (KEYC_IS_MOUSE(key))
+ wp = cmd_mouse_pane(m, NULL, NULL);
+ else
+ wp = w->active;
+ if (wp != NULL)
window_pane_key(wp, c, s, key, m);
}