From 243465386769eeffead0531df4b668b335676492 Mon Sep 17 00:00:00 2001 From: Dane Jensen Date: Wed, 20 May 2026 12:17:50 -0700 Subject: [PATCH] fix: added conditionals and more finding logic to avoid displaying hidden panes. --- window.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/window.c b/window.c index c79f98eb..57ef2e92 100644 --- a/window.c +++ b/window.c @@ -843,26 +843,41 @@ window_add_pane(struct window *w, struct window_pane *other, u_int hlimit, void window_lost_pane(struct window *w, struct window_pane *wp) { + struct window_pane *wpp, *twpp; + log_debug("%s: @%u pane %%%u", __func__, w->id, wp->id); if (wp == marked_pane.wp) server_clear_marked(); window_pane_stack_remove(&w->last_panes, wp); - if (wp == w->active) { - w->active = TAILQ_FIRST(&w->last_panes); - if (w->active == NULL) { - w->active = TAILQ_PREV(wp, window_panes, entry); - if (w->active == NULL) - w->active = TAILQ_NEXT(wp, entry); - } - if (w->active != NULL) { - window_pane_stack_remove(&w->last_panes, w->active); - w->active->flags |= PANE_CHANGED; - notify_window("window-pane-changed", w); - window_update_focus(w); + if (wp != w->active) + return; + + /* Try to find a good fit. */ + wpp = TAILQ_FIRST(&w->last_panes); + if (wpp == NULL || wpp->flags & PANE_HIDDEN) { + wpp = TAILQ_PREV(wp, window_panes, entry); + if (wpp == NULL || wpp->flags & PANE_HIDDEN) + wpp = TAILQ_NEXT(wp, entry); + } + /* Try to find any fit. */ + if (wpp == NULL || (wpp->flags & PANE_HIDDEN)) { + TAILQ_FOREACH_SAFE(wpp, &w->panes, entry, twpp) { + if (wpp != wp && (~wpp->flags & PANE_HIDDEN)) + break; } } + if (wpp != NULL && (wpp->flags & PANE_HIDDEN)) + wpp = NULL; + + w->active = wpp; + if (w->active != NULL) { + window_pane_stack_remove(&w->last_panes, w->active); + w->active->flags |= PANE_CHANGED; + notify_window("window-pane-changed", w); + window_update_focus(w); + } } void