aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r--src/nvim/window.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index f7d5ee92cd..d3280a3478 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -798,6 +798,19 @@ int win_fdccol_count(win_T *wp)
return fdc[0] - '0';
}
+/// Merges two window configs, freeing replaced fields if necessary.
+void merge_win_config(WinConfig *dst, const WinConfig src)
+ FUNC_ATTR_NONNULL_ALL
+{
+ if (dst->title_chunks.items != src.title_chunks.items) {
+ clear_virttext(&dst->title_chunks);
+ }
+ if (dst->footer_chunks.items != src.footer_chunks.items) {
+ clear_virttext(&dst->footer_chunks);
+ }
+ *dst = src;
+}
+
void ui_ext_win_position(win_T *wp, bool validate)
{
wp->w_pos_changed = false;
@@ -1288,7 +1301,7 @@ win_T *win_split_ins(int size, int flags, win_T *new_wp, int dir, frame_T *to_fl
new_frame(wp);
// non-floating window doesn't store float config or have a border.
- wp->w_config = WIN_CONFIG_INIT;
+ merge_win_config(&wp->w_config, WIN_CONFIG_INIT);
CLEAR_FIELD(wp->w_border_adj);
}