summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2007-07-30 20:00:38 +0000
committervimboss <devnull@localhost>2007-07-30 20:00:38 +0000
commit75a7454a1910d965f76c8b772648eb7b557af802 (patch)
tree0b58c05b6e6cb636365dbccfc40a419661eb15be
parentfd6b5e92b174d75e3e62691924b007ea71cee634 (diff)
downloadvim-75a7454a1910d965f76c8b772648eb7b557af802.tar.gz
updated for version 7.1-045v7.1.045v7-1-045
-rw-r--r--src/screen.c25
-rw-r--r--src/version.c2
2 files changed, 26 insertions, 1 deletions
diff --git a/src/screen.c b/src/screen.c
index 11344c31..addc13b9 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -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
{
diff --git a/src/version.c b/src/version.c
index 7f9215ee..c4e1de31 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 45,
+/**/
44,
/**/
43,