1
0
forked from aniani/vim

patch 8.2.0328: no redraw when leaving term-normal mode in popup terminal

Problem:    No redraw when leaving terminal-normal mode in a terminal popup
            window.
Solution:   Redraw the popup window. (closes #5708)
This commit is contained in:
Bram Moolenaar
2020-02-28 22:20:10 +01:00
parent 80ae880f5f
commit e52e0c89d1
10 changed files with 126 additions and 34 deletions

View File

@@ -69,6 +69,9 @@ static void win_update(win_T *wp);
#ifdef FEAT_STL_OPT
static void redraw_custom_statusline(win_T *wp);
#endif
#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
static int did_update_one_window;
#endif
/*
* Based on the current value of curwin->w_topline, transfer a screenfull
@@ -81,10 +84,8 @@ update_screen(int type_arg)
int type = type_arg;
win_T *wp;
static int did_intro = FALSE;
#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
int did_one;
#endif
#ifdef FEAT_GUI
int did_one = FALSE;
int did_undraw = FALSE;
int gui_cursor_col = 0;
int gui_cursor_row = 0;
@@ -276,7 +277,7 @@ update_screen(int type_arg)
// Go from top to bottom through the windows, redrawing the ones that need
// it.
#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
did_one = FALSE;
did_update_one_window = FALSE;
#endif
#ifdef FEAT_SEARCH_EXTRA
screen_search_hl.rm.regprog = NULL;
@@ -286,21 +287,11 @@ update_screen(int type_arg)
if (wp->w_redr_type != 0)
{
cursor_off();
#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
#ifdef FEAT_GUI
if (!did_one)
{
did_one = TRUE;
# ifdef FEAT_SEARCH_EXTRA
start_search_hl();
# endif
# ifdef FEAT_CLIPBOARD
// When Visual area changed, may have to update selection.
if (clip_star.available && clip_isautosel_star())
clip_update_selection(&clip_star);
if (clip_plus.available && clip_isautosel_plus())
clip_update_selection(&clip_plus);
# endif
#ifdef FEAT_GUI
// Remove the cursor before starting to do anything, because
// scrolling may make it difficult to redraw the text under
// it.
@@ -311,9 +302,9 @@ update_screen(int type_arg)
gui_undraw_cursor();
did_undraw = TRUE;
}
#endif
}
#endif
win_update(wp);
}
@@ -1422,6 +1413,25 @@ win_update(win_T *wp)
proftime_T syntax_tm;
#endif
#if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD)
// This needs to be done only for the first window when update_screen() is
// called.
if (!did_update_one_window)
{
did_update_one_window = TRUE;
# ifdef FEAT_SEARCH_EXTRA
start_search_hl();
# endif
# ifdef FEAT_CLIPBOARD
// When Visual area changed, may have to update selection.
if (clip_star.available && clip_isautosel_star())
clip_update_selection(&clip_star);
if (clip_plus.available && clip_isautosel_plus())
clip_update_selection(&clip_plus);
# endif
}
#endif
type = wp->w_redr_type;
if (type == NOT_VALID)
@@ -3025,6 +3035,11 @@ redraw_buf_later(buf_T *buf, int type)
if (wp->w_buffer == buf)
redraw_win_later(wp, type);
}
#if defined(FEAT_TERMINAL) && defined(FEAT_PROP_POPUP)
// terminal in popup window is not in list of windows
if (curwin->w_buffer == buf)
redraw_win_later(curwin, type);
#endif
}
#if defined(FEAT_SIGNS) || defined(PROTO)