summaryrefslogtreecommitdiffstats
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
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.
-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);
}