mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 01:34:18 +00:00 
			
		
		
		
	Correctly adjust mouse position if the status line is at the top and
more than one line. GitHub issue 1822.
This commit is contained in:
		@@ -144,13 +144,13 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m)
 | 
			
		||||
	w = wl->window;
 | 
			
		||||
 | 
			
		||||
	y = m->y + m->oy; x = m->x + m->ox;
 | 
			
		||||
	if (m->statusat == 0 && y > 0)
 | 
			
		||||
		y--;
 | 
			
		||||
	if (m->statusat == 0 && y >= m->statuslines)
 | 
			
		||||
		y -= m->statuslines;
 | 
			
		||||
	else if (m->statusat > 0 && y >= (u_int)m->statusat)
 | 
			
		||||
		y = m->statusat - 1;
 | 
			
		||||
	ly = m->ly + m->oy; lx = m->lx + m->ox;
 | 
			
		||||
	if (m->statusat == 0 && ly > 0)
 | 
			
		||||
		ly--;
 | 
			
		||||
	if (m->statusat == 0 && ly >= m->statuslines)
 | 
			
		||||
		ly -= m->statuslines;
 | 
			
		||||
	else if (m->statusat > 0 && ly >= (u_int)m->statusat)
 | 
			
		||||
		ly = m->statusat - 1;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								cmd.c
									
									
									
									
									
								
							@@ -597,8 +597,8 @@ cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp,
 | 
			
		||||
	}
 | 
			
		||||
	log_debug("%s: x=%u, y=%u%s", __func__, x, y, last ? " (last)" : "");
 | 
			
		||||
 | 
			
		||||
	if (m->statusat == 0 && y > 0)
 | 
			
		||||
		y--;
 | 
			
		||||
	if (m->statusat == 0 && y >= m->statuslines)
 | 
			
		||||
		y -= m->statuslines;
 | 
			
		||||
 | 
			
		||||
	if (x < wp->xoff || x >= wp->xoff + wp->sx)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 
 | 
			
		||||
@@ -524,9 +524,10 @@ have_event:
 | 
			
		||||
 | 
			
		||||
	/* Is this on the status line? */
 | 
			
		||||
	m->statusat = status_at_line(c);
 | 
			
		||||
	m->statuslines = status_line_size(c);
 | 
			
		||||
	if (m->statusat != -1 &&
 | 
			
		||||
	    y >= (u_int)m->statusat &&
 | 
			
		||||
	    y < m->statusat + status_line_size(c)) {
 | 
			
		||||
	    y < m->statusat + m->statuslines) {
 | 
			
		||||
		sr = status_get_range(c, x, y - m->statusat);
 | 
			
		||||
		if (sr == NULL) {
 | 
			
		||||
			where = STATUS_DEFAULT;
 | 
			
		||||
@@ -555,8 +556,8 @@ have_event:
 | 
			
		||||
	/* Not on status line. Adjust position and check for border or pane. */
 | 
			
		||||
	if (where == NOWHERE) {
 | 
			
		||||
		px = x;
 | 
			
		||||
		if (m->statusat == 0 && y > 0)
 | 
			
		||||
			py = y - 1;
 | 
			
		||||
		if (m->statusat == 0 && y >= m->statuslines)
 | 
			
		||||
			py = y - m->statuslines;
 | 
			
		||||
		else if (m->statusat > 0 && y >= (u_int)m->statusat)
 | 
			
		||||
			py = m->statusat - 1;
 | 
			
		||||
		else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user