summaryrefslogtreecommitdiffstats
path: root/server-client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2011-05-08 20:34:12 +0000
committerNicholas Marriott <nicm@openbsd.org>2011-05-08 20:34:12 +0000
commitf3741f0653e2a38b9d52851fb187d2592612a7c1 (patch)
treebcf3ac5cb5f3065ac0c895e6452143c823fde48b /server-client.c
parent295ace682020769be8a6a6a02835099d93c392ef (diff)
Add a new option, mouse-resize-pane. When on, panes may be resized by
dragging their borders. From hsim at gmx.li.
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/server-client.c b/server-client.c
index f21f9c36..7ef91236 100644
--- a/server-client.c
+++ b/server-client.c
@@ -89,6 +89,9 @@ server_client_create(int fd)
c->prompt_buffer = NULL;
c->prompt_index = 0;
+ c->last_mouse.b = MOUSE_UP;
+ c->last_mouse.x = c->last_mouse.y = -1;
+
evtimer_set(&c->repeat_timer, server_client_repeat_timer, c);
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
@@ -344,6 +347,9 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
return;
}
}
+ if (options_get_number(oo, "mouse-resize-pane"))
+ layout_resize_pane_mouse(c, mouse);
+ memcpy(&c->last_mouse, mouse, sizeof c->last_mouse);
window_pane_mouse(wp, c->session, mouse);
return;
}
@@ -476,14 +482,24 @@ server_client_reset_state(struct client *c)
tty_cursor(&c->tty, wp->xoff + s->cx, wp->yoff + s->cy);
/*
+ * Resizing panes with the mouse requires at least button mode to give
+ * a smooth appearance.
+ */
+ mode = s->mode;
+ if ((c->last_mouse.b & MOUSE_RESIZE_PANE) &&
+ !(mode & (MODE_MOUSE_BUTTON|MODE_MOUSE_ANY)))
+ mode |= MODE_MOUSE_BUTTON;
+
+ /*
* Any mode will do for mouse-select-pane, but set standard mode if
* none.
*/
- mode = s->mode;
if ((mode & ALL_MOUSE_MODES) == 0) {
if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
options_get_number(oo, "mouse-select-pane"))
mode |= MODE_MOUSE_STANDARD;
+ else if (options_get_number(oo, "mouse-resize-pane"))
+ mode |= MODE_MOUSE_STANDARD;
else if (options_get_number(oo, "mouse-select-window"))
mode |= MODE_MOUSE_STANDARD;
else if (options_get_number(wo, "mode-mouse"))