mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.0.1002: unnecessarily updating screen after timer callback
Problem: Unnecessarily updating screen after timer callback. Solution: Check if calling the timer sets must_redraw.
This commit is contained in:
parent
0903d56f5c
commit
02e177d3e8
@ -2887,7 +2887,7 @@ channel_close(channel_T *channel, int invoke_close_cb)
|
|||||||
if (channel_need_redraw)
|
if (channel_need_redraw)
|
||||||
{
|
{
|
||||||
channel_need_redraw = FALSE;
|
channel_need_redraw = FALSE;
|
||||||
redraw_after_callback();
|
redraw_after_callback(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!channel->ch_drop_never)
|
if (!channel->ch_drop_never)
|
||||||
@ -4130,7 +4130,7 @@ channel_parse_messages(void)
|
|||||||
if (channel_need_redraw)
|
if (channel_need_redraw)
|
||||||
{
|
{
|
||||||
channel_need_redraw = FALSE;
|
channel_need_redraw = FALSE;
|
||||||
redraw_after_callback();
|
redraw_after_callback(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
--safe_to_invoke_callback;
|
--safe_to_invoke_callback;
|
||||||
@ -5230,7 +5230,7 @@ job_check_ended(void)
|
|||||||
if (channel_need_redraw)
|
if (channel_need_redraw)
|
||||||
{
|
{
|
||||||
channel_need_redraw = FALSE;
|
channel_need_redraw = FALSE;
|
||||||
redraw_after_callback();
|
redraw_after_callback(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1194,6 +1194,7 @@ check_due_timer(void)
|
|||||||
long next_due = -1;
|
long next_due = -1;
|
||||||
proftime_T now;
|
proftime_T now;
|
||||||
int did_one = FALSE;
|
int did_one = FALSE;
|
||||||
|
int need_update_screen = FALSE;
|
||||||
long current_id = last_timer_id;
|
long current_id = last_timer_id;
|
||||||
# ifdef WIN3264
|
# ifdef WIN3264
|
||||||
LARGE_INTEGER fr;
|
LARGE_INTEGER fr;
|
||||||
@ -1221,10 +1222,12 @@ check_due_timer(void)
|
|||||||
int did_emsg_save = did_emsg;
|
int did_emsg_save = did_emsg;
|
||||||
int called_emsg_save = called_emsg;
|
int called_emsg_save = called_emsg;
|
||||||
int did_throw_save = did_throw;
|
int did_throw_save = did_throw;
|
||||||
|
int save_must_redraw = must_redraw;
|
||||||
|
|
||||||
timer_busy = timer_busy > 0 || vgetc_busy > 0;
|
timer_busy = timer_busy > 0 || vgetc_busy > 0;
|
||||||
vgetc_busy = 0;
|
vgetc_busy = 0;
|
||||||
called_emsg = FALSE;
|
called_emsg = FALSE;
|
||||||
|
must_redraw = 0;
|
||||||
timer->tr_firing = TRUE;
|
timer->tr_firing = TRUE;
|
||||||
timer_callback(timer);
|
timer_callback(timer);
|
||||||
timer->tr_firing = FALSE;
|
timer->tr_firing = FALSE;
|
||||||
@ -1240,6 +1243,10 @@ check_due_timer(void)
|
|||||||
}
|
}
|
||||||
did_emsg = did_emsg_save;
|
did_emsg = did_emsg_save;
|
||||||
called_emsg = called_emsg_save;
|
called_emsg = called_emsg_save;
|
||||||
|
if (must_redraw != 0)
|
||||||
|
need_update_screen = TRUE;
|
||||||
|
must_redraw = must_redraw > save_must_redraw
|
||||||
|
? must_redraw : save_must_redraw;
|
||||||
|
|
||||||
/* Only fire the timer again if it repeats and stop_timer() wasn't
|
/* Only fire the timer again if it repeats and stop_timer() wasn't
|
||||||
* called while inside the callback (tr_id == -1). */
|
* called while inside the callback (tr_id == -1). */
|
||||||
@ -1265,7 +1272,7 @@ check_due_timer(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (did_one)
|
if (did_one)
|
||||||
redraw_after_callback();
|
redraw_after_callback(need_update_screen);
|
||||||
|
|
||||||
return current_id != last_timer_id ? 1 : next_due;
|
return current_id != last_timer_id ? 1 : next_due;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ void redraw_curbuf_later(int type);
|
|||||||
void redraw_buf_later(buf_T *buf, int type);
|
void redraw_buf_later(buf_T *buf, int type);
|
||||||
void redraw_buf_and_status_later(buf_T *buf, int type);
|
void redraw_buf_and_status_later(buf_T *buf, int type);
|
||||||
int redraw_asap(int type);
|
int redraw_asap(int type);
|
||||||
void redraw_after_callback(void);
|
void redraw_after_callback(int call_update_screen);
|
||||||
void redrawWinline(linenr_T lnum, int invalid);
|
void redrawWinline(linenr_T lnum, int invalid);
|
||||||
void update_curbuf(int type);
|
void update_curbuf(int type);
|
||||||
void update_screen(int type_arg);
|
void update_screen(int type_arg);
|
||||||
@ -47,7 +47,7 @@ void setcursor(void);
|
|||||||
int win_ins_lines(win_T *wp, int row, int line_count, int invalid, int mayclear);
|
int win_ins_lines(win_T *wp, int row, int line_count, int invalid, int mayclear);
|
||||||
int win_del_lines(win_T *wp, int row, int line_count, int invalid, int mayclear, int clear_attr);
|
int win_del_lines(win_T *wp, int row, int line_count, int invalid, int mayclear, int clear_attr);
|
||||||
int screen_ins_lines(int off, int row, int line_count, int end, int clear_attr, win_T *wp);
|
int screen_ins_lines(int off, int row, int line_count, int end, int clear_attr, win_T *wp);
|
||||||
int screen_del_lines(int off, int row, int line_count, int end, int force, int attr, win_T *wp);
|
int screen_del_lines(int off, int row, int line_count, int end, int force, int clear_attr, win_T *wp);
|
||||||
int showmode(void);
|
int showmode(void);
|
||||||
void unshowmode(int force);
|
void unshowmode(int force);
|
||||||
void clearmode(void);
|
void clearmode(void);
|
||||||
|
@ -445,9 +445,11 @@ redraw_asap(int type)
|
|||||||
* Invoked after an asynchronous callback is called.
|
* Invoked after an asynchronous callback is called.
|
||||||
* If an echo command was used the cursor needs to be put back where
|
* If an echo command was used the cursor needs to be put back where
|
||||||
* it belongs. If highlighting was changed a redraw is needed.
|
* it belongs. If highlighting was changed a redraw is needed.
|
||||||
|
* If "call_update_screen" is FALSE don't call update_screen() when at the
|
||||||
|
* command line.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
redraw_after_callback(void)
|
redraw_after_callback(int call_update_screen)
|
||||||
{
|
{
|
||||||
++redrawing_for_callback;
|
++redrawing_for_callback;
|
||||||
|
|
||||||
@ -461,7 +463,7 @@ redraw_after_callback(void)
|
|||||||
#ifdef FEAT_WILDMENU
|
#ifdef FEAT_WILDMENU
|
||||||
&& wild_menu_showing == 0
|
&& wild_menu_showing == 0
|
||||||
#endif
|
#endif
|
||||||
)
|
&& call_update_screen)
|
||||||
update_screen(0);
|
update_screen(0);
|
||||||
/* Redraw in the same position, so that the user can continue
|
/* Redraw in the same position, so that the user can continue
|
||||||
* editing the command. */
|
* editing the command. */
|
||||||
@ -3013,7 +3015,7 @@ win_line(
|
|||||||
int startrow,
|
int startrow,
|
||||||
int endrow,
|
int endrow,
|
||||||
int nochange UNUSED, /* not updating for changed text */
|
int nochange UNUSED, /* not updating for changed text */
|
||||||
proftime_T *syntax_tm)
|
proftime_T *syntax_tm UNUSED)
|
||||||
{
|
{
|
||||||
int col = 0; /* visual column on screen */
|
int col = 0; /* visual column on screen */
|
||||||
unsigned off; /* offset in ScreenLines/ScreenAttrs */
|
unsigned off; /* offset in ScreenLines/ScreenAttrs */
|
||||||
|
@ -669,7 +669,7 @@ write_to_term(buf_T *buffer, char_u *msg, channel_T *channel)
|
|||||||
update_cursor(term, TRUE);
|
update_cursor(term, TRUE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
redraw_after_callback();
|
redraw_after_callback(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -769,6 +769,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1002,
|
||||||
/**/
|
/**/
|
||||||
1001,
|
1001,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user