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;
 | 
						w = wl->window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	y = m->y + m->oy; x = m->x + m->ox;
 | 
						y = m->y + m->oy; x = m->x + m->ox;
 | 
				
			||||||
	if (m->statusat == 0 && y > 0)
 | 
						if (m->statusat == 0 && y >= m->statuslines)
 | 
				
			||||||
		y--;
 | 
							y -= m->statuslines;
 | 
				
			||||||
	else if (m->statusat > 0 && y >= (u_int)m->statusat)
 | 
						else if (m->statusat > 0 && y >= (u_int)m->statusat)
 | 
				
			||||||
		y = m->statusat - 1;
 | 
							y = m->statusat - 1;
 | 
				
			||||||
	ly = m->ly + m->oy; lx = m->lx + m->ox;
 | 
						ly = m->ly + m->oy; lx = m->lx + m->ox;
 | 
				
			||||||
	if (m->statusat == 0 && ly > 0)
 | 
						if (m->statusat == 0 && ly >= m->statuslines)
 | 
				
			||||||
		ly--;
 | 
							ly -= m->statuslines;
 | 
				
			||||||
	else if (m->statusat > 0 && ly >= (u_int)m->statusat)
 | 
						else if (m->statusat > 0 && ly >= (u_int)m->statusat)
 | 
				
			||||||
		ly = m->statusat - 1;
 | 
							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)" : "");
 | 
						log_debug("%s: x=%u, y=%u%s", __func__, x, y, last ? " (last)" : "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (m->statusat == 0 && y > 0)
 | 
						if (m->statusat == 0 && y >= m->statuslines)
 | 
				
			||||||
		y--;
 | 
							y -= m->statuslines;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (x < wp->xoff || x >= wp->xoff + wp->sx)
 | 
						if (x < wp->xoff || x >= wp->xoff + wp->sx)
 | 
				
			||||||
		return (-1);
 | 
							return (-1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -524,9 +524,10 @@ have_event:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Is this on the status line? */
 | 
						/* Is this on the status line? */
 | 
				
			||||||
	m->statusat = status_at_line(c);
 | 
						m->statusat = status_at_line(c);
 | 
				
			||||||
 | 
						m->statuslines = status_line_size(c);
 | 
				
			||||||
	if (m->statusat != -1 &&
 | 
						if (m->statusat != -1 &&
 | 
				
			||||||
	    y >= (u_int)m->statusat &&
 | 
						    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);
 | 
							sr = status_get_range(c, x, y - m->statusat);
 | 
				
			||||||
		if (sr == NULL) {
 | 
							if (sr == NULL) {
 | 
				
			||||||
			where = STATUS_DEFAULT;
 | 
								where = STATUS_DEFAULT;
 | 
				
			||||||
@@ -555,8 +556,8 @@ have_event:
 | 
				
			|||||||
	/* Not on status line. Adjust position and check for border or pane. */
 | 
						/* Not on status line. Adjust position and check for border or pane. */
 | 
				
			||||||
	if (where == NOWHERE) {
 | 
						if (where == NOWHERE) {
 | 
				
			||||||
		px = x;
 | 
							px = x;
 | 
				
			||||||
		if (m->statusat == 0 && y > 0)
 | 
							if (m->statusat == 0 && y >= m->statuslines)
 | 
				
			||||||
			py = y - 1;
 | 
								py = y - m->statuslines;
 | 
				
			||||||
		else if (m->statusat > 0 && y >= (u_int)m->statusat)
 | 
							else if (m->statusat > 0 && y >= (u_int)m->statusat)
 | 
				
			||||||
			py = m->statusat - 1;
 | 
								py = m->statusat - 1;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user