patch 9.1.0100: Redrawing can be improved with undo and 'spell'

Commit: 
https://github.com/vim/vim/commit/f2d90a351159fd6843f450850f52004f42e00183
Author: zeertzjq <zeert...@outlook.com>
Date:   Mon Feb 12 20:28:01 2024 +0100

    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 <zeert...@outlook.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/change.c b/src/change.c
index 0ea424f98..42e6f7939 100644
--- a/src/change.c
+++ b/src/change.c
@@ -559,6 +559,12 @@ changed_common(
            if (!redraw_not_allowed && 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
            // such a degree that nothing will be visible anymore, accounting
            // for 'smoothscroll' <<< or 'listchars' "precedes" marker.
diff --git a/src/drawscreen.c b/src/drawscreen.c
index d1773701d..852d33182 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -1408,7 +1408,7 @@ fold_line(
  *                - if wp->w_buffer->b_mod_set set, update lines between
  *                  b_mod_top and b_mod_bot.
  *                - 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.
  *             4. if scrolled up, update lines at the bottom.
  * This results in three areas that may need updating:
@@ -1567,14 +1567,6 @@ win_update(win_T *wp)
     else
 #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
        // changes.  Set mod_bot to the first line after the changes.
diff --git a/src/popupwin.c b/src/popupwin.c
index 64bb0b5be..bdf4ac7cf 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -3899,8 +3899,8 @@ may_update_popup_mask(int type)
 
                        // The screen position "line" / "col" needs to be
                        // redrawn.  Figure out what window that is and update
-                       // w_redraw_top and w_redr_bot.  Only needs to be done
-                       // once for each window line.
+                       // w_redraw_top and w_redraw_bot.  Only needs to be
+                       // done once for each window line.
                        wp = mouse_find_win(&line_cp, &col_cp, IGNORE_POPUP);
                        if (wp != NULL)
                        {
diff --git a/src/version.c b/src/version.c
index 7a9172a66..602a2f96a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    100,
 /**/
     99,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rZcEf-00BFWV-Vp%40256bit.org.

Raspunde prin e-mail lui