diff --git a/tmux.h b/tmux.h index 75a96c99..8c7e9f11 100644 --- a/tmux.h +++ b/tmux.h @@ -3430,6 +3430,7 @@ struct window *window_create(u_int, u_int, u_int, u_int); void window_pane_set_event(struct window_pane *); struct window_pane *window_get_active_at(struct window *, u_int, u_int); struct window_pane *window_find_string(struct window *, const char *); +int window_has_floating_panes(struct window *); int window_has_pane(struct window *, struct window_pane *); int window_set_active_pane(struct window *, struct window_pane *, int); diff --git a/window-tree.c b/window-tree.c index b5ba7a43..b58d0ffb 100644 --- a/window-tree.c +++ b/window-tree.c @@ -267,21 +267,9 @@ window_tree_build_window(struct session *s, struct winlink *wl, format_free(ft); if (data->type == WINDOW_TREE_SESSION || - data->type == WINDOW_TREE_WINDOW) { - expanded = 0; - /* Without this, the only way to reach a hidden - * floating pane would be to first expand the window - * manually (with the right-arrow key) and then press - * its number — which is non-obvious and breaks the - * expected workflow. - */ - TAILQ_FOREACH(fwp, &wl->window->panes, entry) { - if (fwp->flags & PANE_FLOATING) { - expanded = 1; - break; - } - } - } else + data->type == WINDOW_TREE_WINDOW) + expanded = window_has_floating_panes(wl->window); + else expanded = 1; mti = mode_tree_add(data->data, parent, item, (uint64_t)wl, name, text, expanded); diff --git a/window.c b/window.c index 3aa35f32..29ad1421 100644 --- a/window.c +++ b/window.c @@ -461,6 +461,18 @@ window_pane_send_resize(struct window_pane *wp, u_int sx, u_int sy) fatal("ioctl failed"); } +int +window_has_floating_panes(struct window *w) +{ + struct window_pane *wp; + + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp->flags & PANE_FLOATING) + return (1); + } + return (0); +} + int window_has_pane(struct window *w, struct window_pane *wp) {