diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-08-29 15:06:50 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-08-29 15:06:50 +0100 |
commit | 13608d851a0470ced30921428b3313c023d395d8 (patch) | |
tree | 2e15e6c6a263703e8e293df3e852f6dbc9c092f0 /src | |
parent | b13d3405fffae1115acc1433479b616f30e292e5 (diff) |
patch 9.0.0318: clearing screen causes flickerv9.0.0318
Problem: Clearing screen causes flicker.
Solution: Do not clear but redraw in more cases. Add () to "wait_return".
Diffstat (limited to 'src')
-rw-r--r-- | src/drawscreen.c | 33 | ||||
-rw-r--r-- | src/ex_cmds.c | 5 | ||||
-rw-r--r-- | src/ex_cmds2.c | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 4 | ||||
-rw-r--r-- | src/ex_getln.c | 2 | ||||
-rw-r--r-- | src/getchar.c | 2 | ||||
-rw-r--r-- | src/if_cscope.c | 2 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/memline.c | 2 | ||||
-rw-r--r-- | src/message.c | 12 | ||||
-rw-r--r-- | src/misc1.c | 2 | ||||
-rw-r--r-- | src/option.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/viminfo.c | 2 |
14 files changed, 39 insertions, 37 deletions
diff --git a/src/drawscreen.c b/src/drawscreen.c index a0801e5865..e90da5f942 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -1930,24 +1930,9 @@ win_update(win_T *wp) } } - // When starting redraw in the first line, redraw all lines. When - // there is only one window it's probably faster to clear the screen - // first. + // When starting redraw in the first line, redraw all lines. if (mid_start == 0) - { mid_end = wp->w_height; - if (ONE_WINDOW && !WIN_IS_POPUP(wp)) - { - // 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(); - // The screen was cleared, redraw the tab pages line. - if (redraw_tabline) - draw_tabline(); - } - } // When win_del_lines() or win_ins_lines() caused the screen to be // cleared (only happens for the first window) or when screenclear() @@ -3183,7 +3168,7 @@ redraw_later_clear(void) } /* - * Mark all windows to be redrawn later. + * Mark all windows to be redrawn later. Except popup windows. */ void redraw_all_later(int type) @@ -3196,6 +3181,20 @@ redraw_all_later(int type) set_must_redraw(type); } +#if 0 // not actually used yet, it probably should +/* + * Mark all windows, including popup windows, to be redrawn. + */ + void +redraw_all_windows_later(int type) +{ + redraw_all_later(type); +#ifdef FEAT_PROP_POPUP + popup_redraw_all(); // redraw all popup windows +#endif +} +#endif + /* * Set "must_redraw" to "type" unless it already has a higher value * or it is currently not allowed. diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 96302529cc..d9f1c993db 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1151,7 +1151,8 @@ do_filter( #if defined(FEAT_EVAL) if (!aborting()) #endif - (void)semsg(_(e_cant_create_file_str), itmp); // will call wait_return + // will call wait_return() + (void)semsg(_(e_cant_create_file_str), itmp); goto filterend; } if (curbuf != old_curbuf) @@ -4331,7 +4332,7 @@ ex_substitute(exarg_T *eap) // needed msg_no_more = TRUE; // write message same highlighting as for - // wait_return + // wait_return() smsg_attr(HL_ATTR(HLF_R), _("replace with %s (y/n/a/q/l/^E/^Y)?"), sub); msg_no_more = FALSE; diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index a41e0675b7..3db15922fa 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -348,7 +348,7 @@ check_changed_any( if (!(p_confirm || (cmdmod.cmod_flags & CMOD_CONFIRM))) #endif { - // There must be a wait_return for this message, do_buffer() + // There must be a wait_return() for this message, do_buffer() // may cause a redraw. But wait_return() is a no-op when vgetc() // is busy (Quit used from window menu), then make sure we don't // cause a scroll up. diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 598c6b7c32..1891d8085a 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -879,7 +879,7 @@ do_cmdline( , in_vim9script() ? GETLINE_CONCAT_CONTBAR : GETLINE_CONCAT_CONT)) == NULL) { - // Don't call wait_return for aborted command line. The NULL + // Don't call wait_return() for aborted command line. The NULL // returned for the end of a sourced file or executed function // doesn't do this. if (KeyTyped && !(flags & DOCMD_REPEAT)) @@ -1355,7 +1355,7 @@ do_cmdline( else if (need_wait_return) { /* - * The msg_start() above clears msg_didout. The wait_return we do + * The msg_start() above clears msg_didout. The wait_return() we do * here should not overwrite the command that may be shown before * doing that. */ diff --git a/src/ex_getln.c b/src/ex_getln.c index f28ce8a6c5..dadcfef77f 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1666,7 +1666,7 @@ getcmdline_int( if (!cmd_silent) { i = msg_scrolled; - msg_scrolled = 0; // avoid wait_return message + msg_scrolled = 0; // avoid wait_return() message gotocmdline(TRUE); msg_scrolled += i; redrawcmdprompt(); // draw prompt or indent diff --git a/src/getchar.c b/src/getchar.c index 4134eb9a99..b598997dc8 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -2098,7 +2098,7 @@ getchar_common(typval_T *argvars, typval_T *rettv) // redraw the screen after getchar() if (p_ch == 0) - update_screen(UPD_CLEAR); + update_screen(UPD_NOT_VALID); set_vim_var_nr(VV_MOUSE_WIN, 0); set_vim_var_nr(VV_MOUSE_WINID, 0); diff --git a/src/if_cscope.c b/src/if_cscope.c index 5d24533016..945b019a30 100644 --- a/src/if_cscope.c +++ b/src/if_cscope.c @@ -2474,7 +2474,7 @@ cs_show(exarg_T *eap UNUSED) } } - wait_return(TRUE); + wait_return(FALSE); return CSCOPE_SUCCESS; } diff --git a/src/main.c b/src/main.c index f4db631a31..7a42463ba3 100644 --- a/src/main.c +++ b/src/main.c @@ -651,7 +651,7 @@ vim_main2(void) /* * When done something that is not allowed or given an error message call - * wait_return. This must be done before starttermcap(), because it may + * wait_return(). This must be done before starttermcap(), because it may * switch to another screen. It must be done after settmode(TMODE_RAW), * because we want to react on a single key stroke. * Call settmode and starttermcap here, so the T_KS and T_TI may be @@ -1226,7 +1226,7 @@ main_loop( did_check_timestamps = FALSE; if (need_check_timestamps) check_timestamps(FALSE); - if (need_wait_return) // if wait_return still needed ... + if (need_wait_return) // if wait_return() still needed ... wait_return(FALSE); // ... call it now if (need_start_insertmode && goto_im() && !VIsual_active) { diff --git a/src/memline.c b/src/memline.c index 391121320b..6651cda18c 100644 --- a/src/memline.c +++ b/src/memline.c @@ -822,7 +822,7 @@ ml_open_file(buf_T *buf) if (*p_dir != NUL && mfp->mf_fname == NULL) { - need_wait_return = TRUE; // call wait_return later + need_wait_return = TRUE; // call wait_return() later ++no_wait_return; (void)semsg(_(e_unable_to_open_swap_file_for_str_recovery_impossible), buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname); diff --git a/src/message.c b/src/message.c index 5c5e3783ae..ebf198563a 100644 --- a/src/message.c +++ b/src/message.c @@ -94,7 +94,7 @@ static int verbose_did_open = FALSE; /* * msg(s) - displays the string 's' on the status line * When terminal not initialized (yet) mch_errmsg(..) is used. - * return TRUE if wait_return not called + * return TRUE if wait_return() not called */ int msg(char *s) @@ -631,7 +631,7 @@ do_perror(char *msg) * Rings the bell, if appropriate, and calls message() to do the real work * When terminal not initialized (yet) mch_errmsg(..) is used. * - * Return TRUE if wait_return not called. + * Return TRUE if wait_return() not called. * Note: caller must check 'emsg_not_now()' before calling this. */ static int @@ -758,7 +758,7 @@ emsg_core(char_u *s) attr = HL_ATTR(HLF_E); // set highlight mode for error messages if (msg_scrolled != 0) need_wait_return = TRUE; // needed in case emsg() is called after - // wait_return has reset need_wait_return + // wait_return() has reset need_wait_return // and a redraw is expected because // msg_scrolled is non-zero @@ -2456,7 +2456,7 @@ msg_puts_display( { #endif inc_msg_scrolled(); - need_wait_return = TRUE; // may need wait_return in main() + need_wait_return = TRUE; // may need wait_return() in main() redraw_cmdline = TRUE; if (cmdline_row > 0 && !exmode_active) --cmdline_row; @@ -3716,8 +3716,8 @@ msg_clr_cmdline(void) /* * end putting a message on the screen - * call wait_return if the message does not fit in the available space - * return TRUE if wait_return not called. + * call wait_return() if the message does not fit in the available space + * return TRUE if wait_return() not called. */ int msg_end(void) diff --git a/src/misc1.c b/src/misc1.c index e8216a08ae..8257f7680a 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -616,7 +616,7 @@ ask_yesno(char_u *str, int direct) while (r != 'y' && r != 'n') { - // same highlighting as for wait_return + // same highlighting as for wait_return() smsg_attr(HL_ATTR(HLF_R), "%s (y/n)?", str); if (direct) r = get_keystroke(); diff --git a/src/option.c b/src/option.c index 3e1473fc95..9573351145 100644 --- a/src/option.c +++ b/src/option.c @@ -2184,7 +2184,7 @@ skip: // make sure all characters are printable trans_characters(IObuff, IOSIZE); - ++no_wait_return; // wait_return done later + ++no_wait_return; // wait_return() done later emsg((char *)IObuff); // show error highlighted --no_wait_return; diff --git a/src/version.c b/src/version.c index 6cd7bd28b9..6c9a330d94 100644 --- a/src/version.c +++ b/src/version.c @@ -708,6 +708,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 318, +/**/ 317, /**/ 316, diff --git a/src/viminfo.c b/src/viminfo.c index cd734130f6..acdf61825f 100644 --- a/src/viminfo.c +++ b/src/viminfo.c @@ -3095,7 +3095,7 @@ write_viminfo(char_u *file, int forceit) { int tt = msg_didany; - // avoid a wait_return for this message, it's annoying + // avoid a wait_return() for this message, it's annoying semsg(_(e_viminfo_file_is_not_writable_str), fname); msg_didany = tt; fclose(fp_in); |