mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Make it possible to resize multiple panes by dragging corners, from Dan
Aloni in GitHub issue 1376.
This commit is contained in:
		@@ -131,7 +131,12 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m)
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
	struct window		*w;
 | 
			
		||||
	u_int			 y, ly, x, lx;
 | 
			
		||||
	struct layout_cell	*lc;
 | 
			
		||||
	struct layout_cell	*cells[5], *lc;
 | 
			
		||||
	u_int			 ncells = 0, i, j, resizes = 0;
 | 
			
		||||
	enum layout_type	 type;
 | 
			
		||||
	static const int         offsets[nitems(cells)][2] = {
 | 
			
		||||
	    { 0, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 },
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	wl = cmd_mouse_window(m, NULL);
 | 
			
		||||
	if (wl == NULL) {
 | 
			
		||||
@@ -151,16 +156,37 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m)
 | 
			
		||||
	else if (m->statusat > 0 && ly >= (u_int)m->statusat)
 | 
			
		||||
		ly = m->statusat - 1;
 | 
			
		||||
 | 
			
		||||
	lc = layout_search_by_border(w->layout_root, lx, ly);
 | 
			
		||||
	for (i = 0; i < nitems(cells); i++) {
 | 
			
		||||
		lc = layout_search_by_border(w->layout_root, lx + offsets[i][0],
 | 
			
		||||
		    ly + offsets[i][1]);
 | 
			
		||||
		if (lc == NULL)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		for (j = 0; j < ncells; j++) {
 | 
			
		||||
			if (cells[j] == lc) {
 | 
			
		||||
				lc = NULL;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (lc == NULL)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		cells[ncells] = lc;
 | 
			
		||||
		ncells++;
 | 
			
		||||
	}
 | 
			
		||||
	if (ncells == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (y != ly && lc->parent->type == LAYOUT_TOPBOTTOM)
 | 
			
		||||
		layout_resize_layout(w, lc, LAYOUT_TOPBOTTOM, y - ly, 0);
 | 
			
		||||
	else if (x != lx && lc->parent->type == LAYOUT_LEFTRIGHT)
 | 
			
		||||
		layout_resize_layout(w, lc, LAYOUT_LEFTRIGHT, x - lx, 0);
 | 
			
		||||
	else
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < ncells; i++) {
 | 
			
		||||
		type = cells[i]->parent->type;
 | 
			
		||||
		if (y != ly && type == LAYOUT_TOPBOTTOM) {
 | 
			
		||||
			layout_resize_layout(w, cells[i], type, y - ly, 0);
 | 
			
		||||
			resizes++;
 | 
			
		||||
		} else if (x != lx && type == LAYOUT_LEFTRIGHT) {
 | 
			
		||||
			layout_resize_layout(w, cells[i], type, x - lx, 0);
 | 
			
		||||
			resizes++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (resizes != 0)
 | 
			
		||||
		server_redraw_window(w);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user