=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/layout.c,v retrieving revision 1.16 retrieving revision 1.17 diff -c -r1.16 -r1.17 *** src/usr.bin/tmux/layout.c 2013/01/17 00:11:22 1.16 --- src/usr.bin/tmux/layout.c 2013/03/22 10:37:39 1.17 *************** *** 1,4 **** ! /* $OpenBSD: layout.c,v 1.16 2013/01/17 00:11:22 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: layout.c,v 1.17 2013/03/22 10:37:39 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 443,448 **** --- 443,481 ---- layout_fix_panes(w, sx, sy); } + /* Resize a pane to an absolute size. */ + void + layout_resize_pane_to(struct window_pane *wp, enum layout_type type, + u_int new_size) + { + struct layout_cell *lc, *lcparent; + int change, size; + + lc = wp->layout_cell; + + /* Find next parent of the same type. */ + lcparent = lc->parent; + while (lcparent != NULL && lcparent->type != type) { + lc = lcparent; + lcparent = lc->parent; + } + if (lcparent == NULL) + return; + + /* Work out the size adjustment. */ + if (type == LAYOUT_LEFTRIGHT) + size = lc->sx; + else + size = lc->sy; + if (lc == TAILQ_LAST(&lcparent->cells, layout_cells)) + change = size - new_size; + else + change = new_size - size; + + /* Resize the pane. */ + layout_resize_pane(wp, type, change); + } + /* Resize a single pane within the layout. */ void layout_resize_pane(struct window_pane *wp, enum layout_type type, int change) *************** *** 486,491 **** --- 519,525 ---- notify_window_layout_changed(wp->window); } + /* Resize pane based on mouse events. */ void layout_resize_pane_mouse(struct client *c) { *************** *** 534,539 **** --- 568,574 ---- m->flags &= ~MOUSE_RESIZE_PANE; } + /* Helper function to grow pane. */ int layout_resize_pane_grow( struct layout_cell *lc, enum layout_type type, int needed) *************** *** 574,579 **** --- 609,615 ---- return (size); } + /* Helper function to shrink pane. */ int layout_resize_pane_shrink( struct layout_cell *lc, enum layout_type type, int needed)