Mercurial > vim
changeset 2008:f13a0227fb88 v7.2.305
updated for version 7.2-305
author | vimboss |
---|---|
date | Wed, 25 Nov 2009 12:08:03 +0000 |
parents | b8ab4ba6b110 |
children | c5a806b29372 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 14 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -323,6 +323,7 @@ update_screen(type) int did_one; #endif + /* Don't do anything if the screen structures are (not yet) valid. */ if (!screen_valid(TRUE)) return; @@ -342,7 +343,9 @@ update_screen(type) if (curwin->w_lines_valid == 0 && type < NOT_VALID) type = NOT_VALID; - if (!redrawing()) + /* Postpone the redrawing when it's not needed and when being called + * recursively. */ + if (!redrawing() || updating_screen) { redraw_later(type); /* remember type for next time */ must_redraw = type; @@ -582,6 +585,7 @@ static void update_finish __ARGS((void)) /* * Prepare for updating one or more windows. + * Caller must check for "updating_screen" already set to avoid recursiveness. */ static void update_prepare() @@ -663,7 +667,9 @@ update_debug_sign(buf, lnum) doit = TRUE; } - if (!doit) + /* Return when there is nothing to do or screen updating already + * happening. */ + if (!doit || updating_screen) return; /* update all windows that need updating */ @@ -696,6 +702,10 @@ update_debug_sign(buf, lnum) updateWindow(wp) win_T *wp; { + /* return if already busy updating */ + if (updating_screen) + return; + update_prepare(); #ifdef FEAT_CLIPBOARD