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.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index fb3f1e0c9f..9ec47f8e89 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -773,6 +773,21 @@ static void ui_ext_win_position(win_T *wp)
}
+void ui_ext_win_viewport(win_T *wp)
+{
+ if ((wp == curwin || ui_has(kUIMultigrid)) && wp->w_viewport_invalid) {
+ int botline = wp->w_botline;
+ if (botline == wp->w_buffer->b_ml.ml_line_count+1
+ && wp->w_empty_rows == 0) {
+ // TODO(bfredl): The might be more cases to consider, like how does this
+ // interact with incomplete final line? Diff filler lines?
+ botline = wp->w_buffer->b_ml.ml_line_count;
+ }
+ ui_call_win_viewport(wp->w_grid.handle, wp->handle, wp->w_topline-1,
+ botline, wp->w_cursor.lnum-1, wp->w_cursor.col);
+ wp->w_viewport_invalid = false;
+ }
+}
static bool parse_float_anchor(String anchor, FloatAnchor *out)
{
@@ -4688,6 +4703,7 @@ static win_T *win_alloc(win_T *after, int hidden)
new_wp->w_scbind_pos = 1;
new_wp->w_floating = 0;
new_wp->w_float_config = FLOAT_CONFIG_INIT;
+ new_wp->w_viewport_invalid = true;
// use global option for global-local options
new_wp->w_p_so = -1;
@@ -6992,7 +7008,7 @@ void get_framelayout(const frame_T *fr, list_T *l, bool outer)
}
}
-void win_ui_flush_positions(void)
+void win_ui_flush(void)
{
FOR_ALL_TAB_WINDOWS(tp, wp) {
if (wp->w_pos_changed && wp->w_grid.chars != NULL) {
@@ -7003,6 +7019,9 @@ void win_ui_flush_positions(void)
}
wp->w_pos_changed = false;
}
+ if (tp == curtab) {
+ ui_ext_win_viewport(wp);
+ }
}
}