mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Fix grid clear code to correctly clear with the default background
colour rather than ending up with the used count higher than the total size, GitHub issue 1829.
This commit is contained in:
		@@ -214,7 +214,6 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx, u_int bg)
 | 
			
		||||
	sx = grid_view_x(gd, gd->sx);
 | 
			
		||||
 | 
			
		||||
	grid_move_cells(gd, px, px + nx, py, sx - px - nx, bg);
 | 
			
		||||
	grid_clear(gd, sx - nx, py, px + nx - (sx - nx), 1, bg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Convert cells into a string. */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								grid.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								grid.c
									
									
									
									
									
								
							@@ -547,7 +547,7 @@ void
 | 
			
		||||
grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg)
 | 
			
		||||
{
 | 
			
		||||
	struct grid_line	*gl;
 | 
			
		||||
	u_int			 xx, yy;
 | 
			
		||||
	u_int			 xx, yy, ox, sx;
 | 
			
		||||
 | 
			
		||||
	if (nx == 0 || ny == 0)
 | 
			
		||||
		return;
 | 
			
		||||
@@ -564,16 +564,20 @@ grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg)
 | 
			
		||||
 | 
			
		||||
	for (yy = py; yy < py + ny; yy++) {
 | 
			
		||||
		gl = &gd->linedata[yy];
 | 
			
		||||
		if (px + nx >= gd->sx && px < gl->cellused)
 | 
			
		||||
			gl->cellused = px;
 | 
			
		||||
		if (px > gl->cellsize && COLOUR_DEFAULT(bg))
 | 
			
		||||
			continue;
 | 
			
		||||
		if (px + nx >= gl->cellsize && COLOUR_DEFAULT(bg)) {
 | 
			
		||||
			gl->cellsize = px;
 | 
			
		||||
 | 
			
		||||
		sx = gd->sx;
 | 
			
		||||
		if (sx > gl->cellsize)
 | 
			
		||||
			sx = gl->cellsize;
 | 
			
		||||
		ox = nx;
 | 
			
		||||
		if (COLOUR_DEFAULT(bg)) {
 | 
			
		||||
			if (px > sx)
 | 
			
		||||
				continue;
 | 
			
		||||
			if (px + nx > sx)
 | 
			
		||||
				ox = sx - px;
 | 
			
		||||
		}
 | 
			
		||||
		grid_expand_line(gd, yy, px + nx, 8); /* default bg first */
 | 
			
		||||
		for (xx = px; xx < px + nx; xx++)
 | 
			
		||||
 | 
			
		||||
		grid_expand_line(gd, yy, px + ox, 8); /* default bg first */
 | 
			
		||||
		for (xx = px; xx < px + ox; xx++)
 | 
			
		||||
			grid_clear_cell(gd, xx, yy, bg);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1216,6 +1220,10 @@ grid_reflow(struct grid *gd, u_int sx)
 | 
			
		||||
	struct grid_cell	 gc;
 | 
			
		||||
	u_int			 yy, width, i, at, first;
 | 
			
		||||
 | 
			
		||||
	/* Do not reflow to the same size. */
 | 
			
		||||
	if (sx == gd->sx)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Create a destination grid. This is just used as a container for the
 | 
			
		||||
	 * line data and may not be fully valid.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user