aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2018-07-26 19:55:26 +0200
committerGitHub <noreply@github.com>2018-07-26 19:55:26 +0200
commit5f15788dc3ac1ea7906673eacc9cf9bdb1f14212 (patch)
treec08513af812e27310da3657435f8960ae3cff037
parent9c0c5e8bc60a389988b339372ef804325daf9b3f (diff)
downloadrneovim-5f15788dc3ac1ea7906673eacc9cf9bdb1f14212.tar.gz
rneovim-5f15788dc3ac1ea7906673eacc9cf9bdb1f14212.tar.bz2
rneovim-5f15788dc3ac1ea7906673eacc9cf9bdb1f14212.zip
tui: clip invalid regions on resize (#8779), fixes #8774
-rw-r--r--src/nvim/tui/tui.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index cfcfaa83a0..508d25cd3b 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -802,7 +802,16 @@ static void reset_scroll_region(UI *ui)
static void tui_grid_resize(UI *ui, Integer g, Integer width, Integer height)
{
TUIData *data = ui->data;
- ugrid_resize(&data->grid, (int)width, (int)height);
+ UGrid *grid = &data->grid;
+ ugrid_resize(grid, (int)width, (int)height);
+
+ // resize might not always be followed by a clear before flush
+ // so clip the invalid region
+ for (size_t i = 0; i < kv_size(data->invalid_regions); i++) {
+ Rect *r = &kv_A(data->invalid_regions, i);
+ r->bot = MIN(r->bot, grid->height-1);
+ r->right = MIN(r->right, grid->width-1);
+ }
if (!got_winch) { // Try to resize the terminal window.
UNIBI_SET_NUM_VAR(data->params[0], (int)height);