diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-03-01 12:29:10 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-03-01 12:29:10 +0100 |
commit | cb03642399ae4f3c47a006f608a6b912f9d98b5f (patch) | |
tree | 518b169429d0ba22416156d9e0876189c0893911 /src | |
parent | 5342f00ff95ed0256b8183063a83d72112f1243c (diff) | |
download | vim-cb03642399ae4f3c47a006f608a6b912f9d98b5f.zip |
patch 8.0.0390: when the window scrolls the popup menu may be garbled
Problem: When the window scrolls horizontally when the popup menu is
displayed part of it may not be cleared. (Neovim issue #6184)
Solution: Remove the menu when the windows scrolled. (closes #1524)
Diffstat (limited to 'src')
-rw-r--r-- | src/edit.c | 35 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 21 insertions, 16 deletions
diff --git a/src/edit.c b/src/edit.c index 6fc1e35ac..25896f3d3 100644 --- a/src/edit.c +++ b/src/edit.c @@ -186,7 +186,7 @@ static int ins_compl_pum_key(int c); static int ins_compl_key2count(int c); static int ins_compl_use_match(int c); static int ins_complete(int c, int enable_pum); -static void show_pum(int save_w_wrow); +static void show_pum(int prev_w_wrow, int prev_w_leftcol); static unsigned quote_meta(char_u *dest, char_u *str, int len); #endif /* FEAT_INS_EXPAND */ @@ -2818,6 +2818,7 @@ completeopt_was_set(void) set_completion(colnr_T startcol, list_T *list) { int save_w_wrow = curwin->w_wrow; + int save_w_leftcol = curwin->w_leftcol; /* If already doing completions stop it. */ if (ctrl_x_mode != 0) @@ -2858,7 +2859,7 @@ set_completion(colnr_T startcol, list_T *list) /* Lazily show the popup menu, unless we got interrupted. */ if (!compl_interrupted) - show_pum(save_w_wrow); + show_pum(save_w_wrow, save_w_leftcol); out_flush(); } @@ -5096,6 +5097,7 @@ ins_complete(int c, int enable_pum) colnr_T curs_col; /* cursor column */ int n; int save_w_wrow; + int save_w_leftcol; int insert_match; int save_did_ai = did_ai; @@ -5539,6 +5541,7 @@ ins_complete(int c, int enable_pum) * Find next match (and following matches). */ save_w_wrow = curwin->w_wrow; + save_w_leftcol = curwin->w_leftcol; n = ins_compl_next(TRUE, ins_compl_key2count(c), insert_match, FALSE); /* may undisplay the popup menu */ @@ -5691,9 +5694,8 @@ ins_complete(int c, int enable_pum) /* Show the popup menu, unless we got interrupted. */ if (enable_pum && !compl_interrupted) - { - show_pum(save_w_wrow); - } + show_pum(save_w_wrow, save_w_leftcol); + compl_was_interrupted = compl_interrupted; compl_interrupted = FALSE; @@ -5701,21 +5703,22 @@ ins_complete(int c, int enable_pum) } static void -show_pum(int save_w_wrow) +show_pum(int prev_w_wrow, int prev_w_leftcol) { - /* RedrawingDisabled may be set when invoked through complete(). */ - int n = RedrawingDisabled; + /* RedrawingDisabled may be set when invoked through complete(). */ + int n = RedrawingDisabled; - RedrawingDisabled = 0; + RedrawingDisabled = 0; - /* If the cursor moved we need to remove the pum first. */ - setcursor(); - if (save_w_wrow != curwin->w_wrow) - ins_compl_del_pum(); + /* If the cursor moved or the display scrolled we need to remove the pum + * first. */ + setcursor(); + if (prev_w_wrow != curwin->w_wrow || prev_w_leftcol != curwin->w_leftcol) + ins_compl_del_pum(); - ins_compl_show_pum(); - setcursor(); - RedrawingDisabled = n; + ins_compl_show_pum(); + setcursor(); + RedrawingDisabled = n; } /* diff --git a/src/version.c b/src/version.c index cff9e26af..63eda8b65 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 390, +/**/ 389, /**/ 388, |