mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 17:24:18 +00:00 
			
		
		
		
	Set the window size as well as the layout size when using the preset
layouts.
This commit is contained in:
		@@ -135,6 +135,7 @@ cmd_select_layout_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
changed:
 | 
					changed:
 | 
				
			||||||
	free(oldlayout);
 | 
						free(oldlayout);
 | 
				
			||||||
 | 
						recalculate_sizes();
 | 
				
			||||||
	server_redraw_window(w);
 | 
						server_redraw_window(w);
 | 
				
			||||||
	notify_window("window-layout-changed", w);
 | 
						notify_window("window-layout-changed", w);
 | 
				
			||||||
	return (CMD_RETURN_NORMAL);
 | 
						return (CMD_RETURN_NORMAL);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								layout-set.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								layout-set.c
									
									
									
									
									
								
							@@ -119,7 +119,7 @@ layout_set_even(struct window *w, enum layout_type type)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	struct window_pane	*wp;
 | 
						struct window_pane	*wp;
 | 
				
			||||||
	struct layout_cell	*lc, *lcnew;
 | 
						struct layout_cell	*lc, *lcnew;
 | 
				
			||||||
	u_int			 n;
 | 
						u_int			 n, sx, sy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	layout_print_cell(w->layout_root, __func__, 1);
 | 
						layout_print_cell(w->layout_root, __func__, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -131,7 +131,18 @@ layout_set_even(struct window *w, enum layout_type type)
 | 
				
			|||||||
	/* Free the old root and construct a new. */
 | 
						/* Free the old root and construct a new. */
 | 
				
			||||||
	layout_free(w);
 | 
						layout_free(w);
 | 
				
			||||||
	lc = w->layout_root = layout_create_cell(NULL);
 | 
						lc = w->layout_root = layout_create_cell(NULL);
 | 
				
			||||||
	layout_set_size(lc, w->sx, w->sy, 0, 0);
 | 
						if (type == LAYOUT_LEFTRIGHT) {
 | 
				
			||||||
 | 
							sx = (n * (PANE_MINIMUM + 1)) - 1;
 | 
				
			||||||
 | 
							if (sx < w->sx)
 | 
				
			||||||
 | 
								sx = w->sx;
 | 
				
			||||||
 | 
							sy = w->sy;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							sy = (n * (PANE_MINIMUM + 1)) - 1;
 | 
				
			||||||
 | 
							if (sy < w->sy)
 | 
				
			||||||
 | 
								sy = w->sy;
 | 
				
			||||||
 | 
							sx = w->sx;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						layout_set_size(lc, sx, sy, 0, 0);
 | 
				
			||||||
	layout_make_node(lc, type);
 | 
						layout_make_node(lc, type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Build new leaf cells. */
 | 
						/* Build new leaf cells. */
 | 
				
			||||||
@@ -152,6 +163,7 @@ layout_set_even(struct window *w, enum layout_type type)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	layout_print_cell(w->layout_root, __func__, 1);
 | 
						layout_print_cell(w->layout_root, __func__, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						window_resize(w, lc->sx, lc->sy);
 | 
				
			||||||
	notify_window("window-layout-changed", w);
 | 
						notify_window("window-layout-changed", w);
 | 
				
			||||||
	server_redraw_window(w);
 | 
						server_redraw_window(w);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -288,6 +300,7 @@ layout_set_main_h(struct window *w)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	layout_print_cell(w->layout_root, __func__, 1);
 | 
						layout_print_cell(w->layout_root, __func__, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						window_resize(w, lc->sx, lc->sy);
 | 
				
			||||||
	notify_window("window-layout-changed", w);
 | 
						notify_window("window-layout-changed", w);
 | 
				
			||||||
	server_redraw_window(w);
 | 
						server_redraw_window(w);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -412,6 +425,7 @@ layout_set_main_v(struct window *w)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	layout_print_cell(w->layout_root, __func__, 1);
 | 
						layout_print_cell(w->layout_root, __func__, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						window_resize(w, lc->sx, lc->sy);
 | 
				
			||||||
	notify_window("window-layout-changed", w);
 | 
						notify_window("window-layout-changed", w);
 | 
				
			||||||
	server_redraw_window(w);
 | 
						server_redraw_window(w);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -421,7 +435,7 @@ layout_set_tiled(struct window *w)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	struct window_pane	*wp;
 | 
						struct window_pane	*wp;
 | 
				
			||||||
	struct layout_cell	*lc, *lcrow, *lcchild;
 | 
						struct layout_cell	*lc, *lcrow, *lcchild;
 | 
				
			||||||
	u_int			 n, width, height, used;
 | 
						u_int			 n, width, height, used, sx, sy;
 | 
				
			||||||
	u_int			 i, j, columns, rows;
 | 
						u_int			 i, j, columns, rows;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	layout_print_cell(w->layout_root, __func__, 1);
 | 
						layout_print_cell(w->layout_root, __func__, 1);
 | 
				
			||||||
@@ -450,7 +464,13 @@ layout_set_tiled(struct window *w)
 | 
				
			|||||||
	/* Free old tree and create a new root. */
 | 
						/* Free old tree and create a new root. */
 | 
				
			||||||
	layout_free(w);
 | 
						layout_free(w);
 | 
				
			||||||
	lc = w->layout_root = layout_create_cell(NULL);
 | 
						lc = w->layout_root = layout_create_cell(NULL);
 | 
				
			||||||
	layout_set_size(lc, w->sx, w->sy, 0, 0);
 | 
						sx = ((width + 1) * columns) - 1;
 | 
				
			||||||
 | 
						if (sx < w->sx)
 | 
				
			||||||
 | 
							sx = w->sx;
 | 
				
			||||||
 | 
						sy = ((height + 1) * rows) - 1;
 | 
				
			||||||
 | 
						if (sy < w->sy)
 | 
				
			||||||
 | 
							sy = w->sy;
 | 
				
			||||||
 | 
						layout_set_size(lc, sx, sy, 0, 0);
 | 
				
			||||||
	layout_make_node(lc, LAYOUT_TOPBOTTOM);
 | 
						layout_make_node(lc, LAYOUT_TOPBOTTOM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Create a grid of the cells. */
 | 
						/* Create a grid of the cells. */
 | 
				
			||||||
@@ -514,6 +534,7 @@ layout_set_tiled(struct window *w)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	layout_print_cell(w->layout_root, __func__, 1);
 | 
						layout_print_cell(w->layout_root, __func__, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						window_resize(w, lc->sx, lc->sy);
 | 
				
			||||||
	notify_window("window-layout-changed", w);
 | 
						notify_window("window-layout-changed", w);
 | 
				
			||||||
	server_redraw_window(w);
 | 
						server_redraw_window(w);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								layout.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								layout.c
									
									
									
									
									
								
							@@ -479,7 +479,7 @@ layout_resize(struct window *w, u_int sx, u_int sy)
 | 
				
			|||||||
	 * out proportionately - this should leave the layout fitting the new
 | 
						 * out proportionately - this should leave the layout fitting the new
 | 
				
			||||||
	 * window size.
 | 
						 * window size.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	xchange = sx - w->sx;
 | 
						xchange = sx - lc->sx;
 | 
				
			||||||
	xlimit = layout_resize_check(w, lc, LAYOUT_LEFTRIGHT);
 | 
						xlimit = layout_resize_check(w, lc, LAYOUT_LEFTRIGHT);
 | 
				
			||||||
	if (xchange < 0 && xchange < -xlimit)
 | 
						if (xchange < 0 && xchange < -xlimit)
 | 
				
			||||||
		xchange = -xlimit;
 | 
							xchange = -xlimit;
 | 
				
			||||||
@@ -493,7 +493,7 @@ layout_resize(struct window *w, u_int sx, u_int sy)
 | 
				
			|||||||
		layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, xchange);
 | 
							layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, xchange);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Adjust vertically in a similar fashion. */
 | 
						/* Adjust vertically in a similar fashion. */
 | 
				
			||||||
	ychange = sy - w->sy;
 | 
						ychange = sy - lc->sy;
 | 
				
			||||||
	ylimit = layout_resize_check(w, lc, LAYOUT_TOPBOTTOM);
 | 
						ylimit = layout_resize_check(w, lc, LAYOUT_TOPBOTTOM);
 | 
				
			||||||
	if (ychange < 0 && ychange < -ylimit)
 | 
						if (ychange < 0 && ychange < -ylimit)
 | 
				
			||||||
		ychange = -ylimit;
 | 
							ychange = -ylimit;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								resize.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								resize.c
									
									
									
									
									
								
							@@ -51,6 +51,8 @@ resize_window(struct window *w, u_int sx, u_int sy)
 | 
				
			|||||||
	if (sy < w->layout_root->sy)
 | 
						if (sy < w->layout_root->sy)
 | 
				
			||||||
		sy = w->layout_root->sy;
 | 
							sy = w->layout_root->sy;
 | 
				
			||||||
	window_resize(w, sx, sy);
 | 
						window_resize(w, sx, sy);
 | 
				
			||||||
 | 
						log_debug("%s: @%u resized to %u,%u; layout %u,%u", __func__, w->id,
 | 
				
			||||||
 | 
						    sx, sy, w->layout_root->sx, w->layout_root->sy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Restore the window zoom state. */
 | 
						/* Restore the window zoom state. */
 | 
				
			||||||
	if (zoomed)
 | 
						if (zoomed)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tty.c
									
									
									
									
									
								
							@@ -907,9 +907,8 @@ tty_is_visible(struct tty *tty, const struct tty_ctx *ctx, u_int px, u_int py,
 | 
				
			|||||||
		lines = 0;
 | 
							lines = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx ||
 | 
						if (xoff + nx <= ctx->ox || xoff >= ctx->ox + ctx->sx ||
 | 
				
			||||||
	    yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy) {
 | 
						    yoff + ny <= ctx->oy || yoff >= lines + ctx->oy + ctx->sy)
 | 
				
			||||||
		return (0);
 | 
							return (0);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return (1);
 | 
						return (1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user