diff options
Diffstat (limited to 'server-client.c')
-rw-r--r-- | server-client.c | 18 |
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")) |