Make layout_fix_offsets take a window like layout_fix_panes.

pull/1848/head
nicm 2019-07-15 18:25:07 +00:00
parent 91b6145499
commit 6ceeceab7a
4 changed files with 27 additions and 15 deletions

View File

@ -165,7 +165,7 @@ layout_parse(struct window *w, const char *layout)
layout_assign(&wp, lc);
/* Update pane offsets and sizes. */
layout_fix_offsets(lc);
layout_fix_offsets(w);
layout_fix_panes(w);
recalculate_sizes();

View File

@ -158,7 +158,7 @@ layout_set_even(struct window *w, enum layout_type type)
layout_spread_cell(w, lc);
/* Fix cell offsets. */
layout_fix_offsets(lc);
layout_fix_offsets(w);
layout_fix_panes(w);
layout_print_cell(w->layout_root, __func__, 1);
@ -257,7 +257,7 @@ layout_set_main_h(struct window *w)
}
/* Fix cell offsets. */
layout_fix_offsets(lc);
layout_fix_offsets(w);
layout_fix_panes(w);
layout_print_cell(w->layout_root, __func__, 1);
@ -344,7 +344,7 @@ layout_set_main_v(struct window *w)
}
/* Fix cell offsets. */
layout_fix_offsets(lc);
layout_fix_offsets(w);
layout_fix_panes(w);
layout_print_cell(w->layout_root, __func__, 1);
@ -453,7 +453,7 @@ layout_set_tiled(struct window *w)
}
/* Fix cell offsets. */
layout_fix_offsets(lc);
layout_fix_offsets(w);
layout_fix_panes(w);
layout_print_cell(w->layout_root, __func__, 1);

View File

@ -200,8 +200,8 @@ layout_make_node(struct layout_cell *lc, enum layout_type type)
}
/* Fix cell offsets based on their sizes. */
void
layout_fix_offsets(struct layout_cell *lc)
static void
layout_fix_offsets1(struct layout_cell *lc)
{
struct layout_cell *lcchild;
u_int xoff, yoff;
@ -212,7 +212,7 @@ layout_fix_offsets(struct layout_cell *lc)
lcchild->xoff = xoff;
lcchild->yoff = lc->yoff;
if (lcchild->type != LAYOUT_WINDOWPANE)
layout_fix_offsets(lcchild);
layout_fix_offsets1(lcchild);
xoff += lcchild->sx + 1;
}
} else {
@ -221,12 +221,24 @@ layout_fix_offsets(struct layout_cell *lc)
lcchild->xoff = lc->xoff;
lcchild->yoff = yoff;
if (lcchild->type != LAYOUT_WINDOWPANE)
layout_fix_offsets(lcchild);
layout_fix_offsets1(lcchild);
yoff += lcchild->sy + 1;
}
}
}
/* Update cell offsets based on their sizes. */
void
layout_fix_offsets(struct window *w)
{
struct layout_cell *lc = w->layout_root;
lc->xoff = 0;
lc->yoff = 0;
layout_fix_offsets1(lc);
}
/*
* Returns 1 if we need to reserve space for the pane status line. This is the
* case for the most upper panes only.
@ -507,7 +519,7 @@ layout_resize(struct window *w, u_int sx, u_int sy)
layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, ychange);
/* Fix cell offsets. */
layout_fix_offsets(lc);
layout_fix_offsets(w);
layout_fix_panes(w);
}
@ -567,7 +579,7 @@ layout_resize_layout(struct window *w, struct layout_cell *lc,
}
/* Fix cell offsets. */
layout_fix_offsets(w->layout_root);
layout_fix_offsets(w);
layout_fix_panes(w);
notify_window("window-layout-changed", w);
}
@ -988,7 +1000,7 @@ layout_split_pane(struct window_pane *wp, enum layout_type type, int size,
if (full_size) {
if (!resize_first)
layout_resize_child_cells(wp->window, lc);
layout_fix_offsets(wp->window->layout_root);
layout_fix_offsets(wp->window);
} else
layout_make_leaf(lc, wp);
@ -1006,7 +1018,7 @@ layout_close_pane(struct window_pane *wp)
/* Fix pane offsets and sizes. */
if (w->layout_root != NULL) {
layout_fix_offsets(w->layout_root);
layout_fix_offsets(w);
layout_fix_panes(w);
}
notify_window("window-layout-changed", w);
@ -1073,7 +1085,7 @@ layout_spread_out(struct window_pane *wp)
do {
if (layout_spread_cell(w, parent)) {
layout_fix_offsets(parent);
layout_fix_offsets(w);
layout_fix_panes(w);
break;
}

2
tmux.h
View File

@ -2438,7 +2438,7 @@ void layout_set_size(struct layout_cell *, u_int, u_int, u_int,
u_int);
void layout_make_leaf(struct layout_cell *, struct window_pane *);
void layout_make_node(struct layout_cell *, enum layout_type);
void layout_fix_offsets(struct layout_cell *);
void layout_fix_offsets(struct window *);
void layout_fix_panes(struct window *);
void layout_resize_adjust(struct window *, struct layout_cell *,
enum layout_type, int);