mirror of
https://github.com/tmux/tmux.git
synced 2026-05-31 14:46:17 +00:00
Added logic to prevent hidden panes from being selected as the window's active pane.
Additional logic added to find any valid pane if the best fit checks fail.
This commit is contained in:
39
window.c
39
window.c
@@ -843,26 +843,41 @@ window_add_pane(struct window *w, struct window_pane *other, u_int hlimit,
|
|||||||
void
|
void
|
||||||
window_lost_pane(struct window *w, struct window_pane *wp)
|
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);
|
log_debug("%s: @%u pane %%%u", __func__, w->id, wp->id);
|
||||||
|
|
||||||
if (wp == marked_pane.wp)
|
if (wp == marked_pane.wp)
|
||||||
server_clear_marked();
|
server_clear_marked();
|
||||||
|
|
||||||
window_pane_stack_remove(&w->last_panes, wp);
|
window_pane_stack_remove(&w->last_panes, wp);
|
||||||
if (wp == w->active) {
|
if (wp != w->active)
|
||||||
w->active = TAILQ_FIRST(&w->last_panes);
|
return;
|
||||||
if (w->active == NULL) {
|
|
||||||
w->active = TAILQ_PREV(wp, window_panes, entry);
|
/* Try to find a good fit. */
|
||||||
if (w->active == NULL)
|
wpp = TAILQ_FIRST(&w->last_panes);
|
||||||
w->active = TAILQ_NEXT(wp, entry);
|
if (wpp == NULL || wpp->flags & PANE_HIDDEN) {
|
||||||
}
|
wpp = TAILQ_PREV(wp, window_panes, entry);
|
||||||
if (w->active != NULL) {
|
if (wpp == NULL || wpp->flags & PANE_HIDDEN)
|
||||||
window_pane_stack_remove(&w->last_panes, w->active);
|
wpp = TAILQ_NEXT(wp, entry);
|
||||||
w->active->flags |= PANE_CHANGED;
|
}
|
||||||
notify_window("window-pane-changed", w);
|
/* Try to find any fit. */
|
||||||
window_update_focus(w);
|
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
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user