]> granicus.if.org Git - vim/commitdiff
updated for version 7.1-045 v7.1.045
authorBram Moolenaar <Bram@vim.org>
Mon, 30 Jul 2007 20:00:38 +0000 (20:00 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 30 Jul 2007 20:00:38 +0000 (20:00 +0000)
src/screen.c
src/version.c

index 11344c317d612bdf6511ca2775002e102dc64a02..addc13b915f22b203d08293022c96e5be22dadc4 100644 (file)
@@ -331,6 +331,11 @@ update_screen(type)
     {
        if (type < must_redraw)     /* use maximal type */
            type = must_redraw;
+
+       /* must_redraw is reset here, so that when we run into some weird
+        * reason to redraw while busy redrawing (e.g., asynchronous
+        * scrolling), or update_topline() in win_update() will cause a
+        * scroll, the screen will be redrawn later or in win_update(). */
        must_redraw = 0;
     }
 
@@ -1019,6 +1024,13 @@ win_update(wp)
            type = VALID;
     }
 
+    /* Trick: we want to avoid clearning the screen twice.  screenclear() will
+     * set "screen_cleared" to TRUE.  The special value MAYBE (which is still
+     * non-zero and thus not FALSE) will indicate that screenclear() was not
+     * called. */
+    if (screen_cleared)
+       screen_cleared = MAYBE;
+
     /*
      * If there are no changes on the screen that require a complete redraw,
      * handle three cases:
@@ -1220,7 +1232,11 @@ win_update(wp)
            mid_end = wp->w_height;
            if (lastwin == firstwin)
            {
-               screenclear();
+               /* Clear the screen when it was not done by win_del_lines() or
+                * win_ins_lines() above, "screen_cleared" is FALSE or MAYBE
+                * then. */
+               if (screen_cleared != TRUE)
+                   screenclear();
 #ifdef FEAT_WINDOWS
                /* The screen was cleared, redraw the tab pages line. */
                if (redraw_tabline)
@@ -1228,6 +1244,13 @@ win_update(wp)
 #endif
            }
        }
+
+       /* When win_del_lines() or win_ins_lines() caused the screen to be
+        * cleared (only happens for the first window) or when screenclear()
+        * was called directly above, "must_redraw" will have been set to
+        * NOT_VALID, need to reset it here to avoid redrawing twice. */
+       if (screen_cleared == TRUE)
+           must_redraw = 0;
     }
     else
     {
index 7f9215ee44988cbec69f1439bb36092d17f122e1..c4e1de31f5b661152b1ecdbf16a703034e567252 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    45,
 /**/
     44,
 /**/