From 4e4fe3eb391e5614b2cc1c7c5086df0f96165ad3 Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Tue, 11 Mar 2025 08:14:26 +0000
Subject: [PATCH] Cleanup window_get_active_at function. GitHub issue 4401 from
 Michael Grant.

---
 window.c | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/window.c b/window.c
index 3bb67f00..b1691ac6 100644
--- a/window.c
+++ b/window.c
@@ -72,6 +72,8 @@ struct window_pane_input_data {
 static struct window_pane *window_pane_create(struct window *, u_int, u_int,
 		    u_int);
 static void	window_pane_destroy(struct window_pane *);
+static void	window_pane_full_size_offset(struct window_pane *wp,
+		    u_int *xoff, u_int *yoff, u_int *sx, u_int *sy);
 
 RB_GENERATE(windows, window, entry, window_cmp);
 RB_GENERATE(winlinks, winlink, entry, winlink_cmp);
@@ -584,34 +586,15 @@ struct window_pane *
 window_get_active_at(struct window *w, u_int x, u_int y)
 {
 	struct window_pane	*wp;
-	int			 pane_scrollbars;
-	u_int			 sb_pos, sb_w, xoff, sx;
-
-	pane_scrollbars = options_get_number(w->options, "pane-scrollbars");
-	sb_pos = options_get_number(w->options, "pane-scrollbars-position");
+	u_int			 xoff, yoff, sx, sy;
 
 	TAILQ_FOREACH(wp, &w->panes, entry) {
 		if (!window_pane_visible(wp))
 			continue;
-
-		if (pane_scrollbars == PANE_SCROLLBARS_ALWAYS ||
-		    (pane_scrollbars == PANE_SCROLLBARS_MODAL &&
-		     window_pane_mode(wp) != WINDOW_PANE_NO_MODE)) {
-			sb_w = wp->scrollbar_style.width +
-			    wp->scrollbar_style.pad;
-		} else
-			sb_w = 0;
-
-		if (sb_pos == PANE_SCROLLBARS_LEFT) {
-			xoff = wp->xoff - sb_w;
-			sx = wp->sx + sb_w;
-		} else { /* sb_pos == PANE_SCROLLBARS_RIGHT */
-			xoff = wp->xoff;
-			sx = wp->sx + sb_w;
-		}
+		window_pane_full_size_offset(wp, &xoff, &yoff, &sx, &sy);
 		if (x < xoff || x > xoff + sx)
 			continue;
-		if (y < wp->yoff || y > wp->yoff + wp->sy)
+		if (y < yoff || y > yoff + sy)
 			continue;
 		return (wp);
 	}