mirror of
https://github.com/tmux/tmux.git
synced 2026-03-31 08:46:27 +00:00
Fix a crash when clicking a floating pane in the status line which was minimised after it was made active by window-tree. Correct the way window-tree displays floating panes so they can be easily unminimmised.
This commit is contained in:
2
layout.c
2
layout.c
@@ -628,6 +628,8 @@ layout_unminimise_cell(struct window *w, struct layout_cell *lc)
|
|||||||
{
|
{
|
||||||
struct layout_cell *lcother, *lcparent;
|
struct layout_cell *lcother, *lcparent;
|
||||||
|
|
||||||
|
if (lc == NULL)
|
||||||
|
return;
|
||||||
lcparent = lc->parent;
|
lcparent = lc->parent;
|
||||||
if (lcparent == NULL) {
|
if (lcparent == NULL) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ window_tree_build_window(struct session *s, struct winlink *wl,
|
|||||||
struct window_tree_itemdata *item;
|
struct window_tree_itemdata *item;
|
||||||
struct mode_tree_item *mti;
|
struct mode_tree_item *mti;
|
||||||
char *name, *text;
|
char *name, *text;
|
||||||
struct window_pane *wp, **l;
|
struct window_pane *wp, *fwp, **l;
|
||||||
u_int n, i;
|
u_int n, i;
|
||||||
int expanded;
|
int expanded;
|
||||||
struct format_tree *ft;
|
struct format_tree *ft;
|
||||||
@@ -267,9 +267,21 @@ window_tree_build_window(struct session *s, struct winlink *wl,
|
|||||||
format_free(ft);
|
format_free(ft);
|
||||||
|
|
||||||
if (data->type == WINDOW_TREE_SESSION ||
|
if (data->type == WINDOW_TREE_SESSION ||
|
||||||
data->type == WINDOW_TREE_WINDOW)
|
data->type == WINDOW_TREE_WINDOW) {
|
||||||
expanded = 0;
|
expanded = 0;
|
||||||
else
|
/* Without this, the only way to reach a minimised
|
||||||
|
* 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
|
||||||
expanded = 1;
|
expanded = 1;
|
||||||
mti = mode_tree_add(data->data, parent, item, (uint64_t)wl, name, text,
|
mti = mode_tree_add(data->data, parent, item, (uint64_t)wl, name, text,
|
||||||
expanded);
|
expanded);
|
||||||
|
|||||||
7
window.c
7
window.c
@@ -541,7 +541,7 @@ window_set_active_pane(struct window *w, struct window_pane *wp, int notify)
|
|||||||
|
|
||||||
if (wp->flags & PANE_MINIMISED) {
|
if (wp->flags & PANE_MINIMISED) {
|
||||||
wp->flags &= ~PANE_MINIMISED;
|
wp->flags &= ~PANE_MINIMISED;
|
||||||
if (w->layout_root != NULL) {
|
if (w->layout_root != NULL && wp->saved_layout_cell != NULL) {
|
||||||
wp->layout_cell = wp->saved_layout_cell;
|
wp->layout_cell = wp->saved_layout_cell;
|
||||||
wp->saved_layout_cell = NULL;
|
wp->saved_layout_cell = NULL;
|
||||||
layout_unminimise_cell(w, wp->layout_cell);
|
layout_unminimise_cell(w, wp->layout_cell);
|
||||||
@@ -791,7 +791,10 @@ window_unzoom(struct window *w, int notify)
|
|||||||
|
|
||||||
TAILQ_FOREACH(wp, &w->panes, entry) {
|
TAILQ_FOREACH(wp, &w->panes, entry) {
|
||||||
wp->layout_cell = wp->saved_layout_cell;
|
wp->layout_cell = wp->saved_layout_cell;
|
||||||
wp->saved_layout_cell = NULL;
|
if (wp->flags & PANE_MINIMISED)
|
||||||
|
wp->saved_layout_cell = wp->layout_cell;
|
||||||
|
else
|
||||||
|
wp->saved_layout_cell = NULL;
|
||||||
wp->flags &= ~PANE_ZOOMED;
|
wp->flags &= ~PANE_ZOOMED;
|
||||||
}
|
}
|
||||||
layout_fix_panes(w, NULL);
|
layout_fix_panes(w, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user