forked from aniani/vim
patch 9.1.0100: Redrawing can be improved with undo and 'spell'
Problem: When undoing with 'spell', redrawWinline() is called after changed_lines(), while later win_update() sets redraw type to UPD_NOT_VALID, even though w_redraw_top and w_redraw_bot are still valid. Solution: Only set redraw type to UPD_NOT_VALID when inserting/deleting lines after parts of window has pending redraw, i.e., when changed_lines() is called after redrawWinline(). (zeertzjq) closes: #14019 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
a0010a186d
commit
f2d90a3511
@@ -559,6 +559,12 @@ changed_common(
|
|||||||
if (!redraw_not_allowed && wp->w_redr_type < UPD_VALID)
|
if (!redraw_not_allowed && wp->w_redr_type < UPD_VALID)
|
||||||
wp->w_redr_type = UPD_VALID;
|
wp->w_redr_type = UPD_VALID;
|
||||||
|
|
||||||
|
// When inserting/deleting lines and the window has specific lines
|
||||||
|
// to be redrawn, w_redraw_top and w_redraw_bot may now be invalid,
|
||||||
|
// so just redraw everything.
|
||||||
|
if (xtra != 0 && wp->w_redraw_top != 0)
|
||||||
|
redraw_win_later(wp, UPD_NOT_VALID);
|
||||||
|
|
||||||
// Reset "w_skipcol" if the topline length has become smaller to
|
// Reset "w_skipcol" if the topline length has become smaller to
|
||||||
// such a degree that nothing will be visible anymore, accounting
|
// such a degree that nothing will be visible anymore, accounting
|
||||||
// for 'smoothscroll' <<< or 'listchars' "precedes" marker.
|
// for 'smoothscroll' <<< or 'listchars' "precedes" marker.
|
||||||
|
@@ -1408,7 +1408,7 @@ fold_line(
|
|||||||
* - if wp->w_buffer->b_mod_set set, update lines between
|
* - if wp->w_buffer->b_mod_set set, update lines between
|
||||||
* b_mod_top and b_mod_bot.
|
* b_mod_top and b_mod_bot.
|
||||||
* - if wp->w_redraw_top non-zero, redraw lines between
|
* - if wp->w_redraw_top non-zero, redraw lines between
|
||||||
* wp->w_redraw_top and wp->w_redr_bot.
|
* wp->w_redraw_top and wp->w_redraw_bot.
|
||||||
* - continue redrawing when syntax status is invalid.
|
* - continue redrawing when syntax status is invalid.
|
||||||
* 4. if scrolled up, update lines at the bottom.
|
* 4. if scrolled up, update lines at the bottom.
|
||||||
* This results in three areas that may need updating:
|
* This results in three areas that may need updating:
|
||||||
@@ -1567,14 +1567,6 @@ win_update(win_T *wp)
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (buf->b_mod_set && buf->b_mod_xlines != 0 && wp->w_redraw_top != 0)
|
|
||||||
{
|
|
||||||
// When there are both inserted/deleted lines and specific lines to be
|
|
||||||
// redrawn, w_redraw_top and w_redraw_bot may be invalid, just redraw
|
|
||||||
// everything (only happens when redrawing is off for while).
|
|
||||||
type = UPD_NOT_VALID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// Set mod_top to the first line that needs displaying because of
|
// Set mod_top to the first line that needs displaying because of
|
||||||
// changes. Set mod_bot to the first line after the changes.
|
// changes. Set mod_bot to the first line after the changes.
|
||||||
|
@@ -3899,8 +3899,8 @@ may_update_popup_mask(int type)
|
|||||||
|
|
||||||
// The screen position "line" / "col" needs to be
|
// The screen position "line" / "col" needs to be
|
||||||
// redrawn. Figure out what window that is and update
|
// redrawn. Figure out what window that is and update
|
||||||
// w_redraw_top and w_redr_bot. Only needs to be done
|
// w_redraw_top and w_redraw_bot. Only needs to be
|
||||||
// once for each window line.
|
// done once for each window line.
|
||||||
wp = mouse_find_win(&line_cp, &col_cp, IGNORE_POPUP);
|
wp = mouse_find_win(&line_cp, &col_cp, IGNORE_POPUP);
|
||||||
if (wp != NULL)
|
if (wp != NULL)
|
||||||
{
|
{
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
100,
|
||||||
/**/
|
/**/
|
||||||
99,
|
99,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user