summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/layout.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2011-05-08 20:34:13 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2011-05-08 20:34:13 +0000
commit4ac9a56036230b9aae023029297404d5d6020aa1 (patch)
treee8bca37ddb914a8640cd7ee6a6ddab82d9d293bc /usr.bin/tmux/layout.c
parent9f2d1ec07419dca4c66f639ab37ac5bcc7adba04 (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 'usr.bin/tmux/layout.c')
-rw-r--r--usr.bin/tmux/layout.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/usr.bin/tmux/layout.c b/usr.bin/tmux/layout.c
index 703d1ff97c7..ff49811aff9 100644
--- a/usr.bin/tmux/layout.c
+++ b/usr.bin/tmux/layout.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: layout.c,v 1.6 2010/06/29 03:30:14 nicm Exp $ */
+/* $OpenBSD: layout.c,v 1.7 2011/05/08 20:34:12 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -485,6 +485,53 @@ layout_resize_pane(struct window_pane *wp, enum layout_type type, int change)
layout_fix_panes(wp->window, wp->window->sx, wp->window->sy);
}
+void
+layout_resize_pane_mouse(struct client *c, struct mouse_event *mouse)
+{
+ struct window *w;
+ struct window_pane *wp;
+ int pane_border;
+
+ w = c->session->curw->window;
+
+ pane_border = 0;
+ if ((c->last_mouse.b & MOUSE_BUTTON) != MOUSE_UP &&
+ (c->last_mouse.b & MOUSE_RESIZE_PANE)) {
+ TAILQ_FOREACH(wp, &w->panes, entry) {
+ if (wp->xoff + wp->sx == c->last_mouse.x &&
+ wp->yoff <= 1 + c->last_mouse.y &&
+ wp->yoff + wp->sy >= c->last_mouse.y) {
+ layout_resize_pane(wp, LAYOUT_LEFTRIGHT,
+ mouse->x - c->last_mouse.x);
+ pane_border = 1;
+ }
+ if (wp->yoff + wp->sy == c->last_mouse.y &&
+ wp->xoff <= 1 + c->last_mouse.x &&
+ wp->xoff + wp->sx >= c->last_mouse.x) {
+ layout_resize_pane(wp, LAYOUT_TOPBOTTOM,
+ mouse->y - c->last_mouse.y);
+ pane_border = 1;
+ }
+ }
+ if (pane_border)
+ server_redraw_window(w);
+ } else if (mouse->b != MOUSE_UP &&
+ mouse->b == (mouse->b & MOUSE_BUTTON)) {
+ TAILQ_FOREACH(wp, &w->panes, entry) {
+ if ((wp->xoff + wp->sx == mouse->x &&
+ wp->yoff <= 1 + mouse->y &&
+ wp->yoff + wp->sy >= mouse->y) ||
+ (wp->yoff + wp->sy == mouse->y &&
+ wp->xoff <= 1 + mouse->x &&
+ wp->xoff + wp->sx >= mouse->x)) {
+ pane_border = 1;
+ }
+ }
+ }
+ if (pane_border)
+ mouse->b |= MOUSE_RESIZE_PANE;
+}
+
int
layout_resize_pane_grow(
struct layout_cell *lc, enum layout_type type, int needed)