# HG changeset patch # User Christian Brabandt # Date 1485971105 -3600 # Node ID 4d34e72fe63d51ec39decab73fe2bac354dfac2c # Parent d6014018cd02ae495502e91dc9dc2505831f86a7 patch 8.0.0286: not always redrawing after screen resize commit https://github.com/vim/vim/commit/c10f0e7cb0f35eea489b038e56c87b818eee975b Author: Bram Moolenaar Date: Wed Feb 1 18:37:14 2017 +0100 patch 8.0.0286: not always redrawing after screen resize Problem: When concealing is active and the screen is resized in the GUI it is not immediately redrawn. Solution: Use update_prepare() and update_finish() from update_single_line(). diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -777,6 +777,57 @@ update_screen(int type) #endif } +#if defined(FEAT_SIGNS) || defined(FEAT_GUI) || defined(FEAT_CONCEAL) +/* + * Prepare for updating one or more windows. + * Caller must check for "updating_screen" already set to avoid recursiveness. + */ + static void +update_prepare(void) +{ + cursor_off(); + updating_screen = TRUE; +#ifdef FEAT_GUI + /* Remove the cursor before starting to do anything, because scrolling may + * make it difficult to redraw the text under it. */ + if (gui.in_use) + gui_undraw_cursor(); +#endif +#ifdef FEAT_SEARCH_EXTRA + start_search_hl(); +#endif +} + +/* + * Finish updating one or more windows. + */ + static void +update_finish(void) +{ + if (redraw_cmdline) + showmode(); + +# ifdef FEAT_SEARCH_EXTRA + end_search_hl(); +# endif + + updating_screen = FALSE; + +# ifdef FEAT_GUI + gui_may_resize_shell(); + + /* Redraw the cursor and update the scrollbars when all screen updating is + * done. */ + if (gui.in_use) + { + out_flush(); /* required before updating the cursor */ + gui_update_cursor(FALSE, FALSE); + gui_update_scrollbars(FALSE); + } +# endif +} +#endif + #if defined(FEAT_CONCEAL) || defined(PROTO) /* * Return TRUE if the cursor line in window "wp" may be concealed, according @@ -826,17 +877,12 @@ update_single_line(win_T *wp, linenr_T l /* Don't do anything if the screen structures are (not yet) valid. */ if (!screen_valid(TRUE) || updating_screen) return; - updating_screen = TRUE; if (lnum >= wp->w_topline && lnum < wp->w_botline && foldedCount(wp, lnum, &win_foldinfo) == 0) { -# ifdef FEAT_GUI - /* Remove the cursor before starting to do anything, because scrolling - * may make it difficult to redraw the text under it. */ - if (gui.in_use) - gui_undraw_cursor(); -# endif + update_prepare(); + row = 0; for (j = 0; j < wp->w_lines_valid; ++j) { @@ -856,68 +902,10 @@ update_single_line(win_T *wp, linenr_T l } row += wp->w_lines[j].wl_size; } -# ifdef FEAT_GUI - /* Redraw the cursor */ - if (gui.in_use) - { - out_flush(); /* required before updating the cursor */ - gui_update_cursor(FALSE, FALSE); - } -# endif + + update_finish(); } need_cursor_line_redraw = FALSE; - updating_screen = FALSE; -} -#endif - -#if defined(FEAT_SIGNS) || defined(FEAT_GUI) -/* - * Prepare for updating one or more windows. - * Caller must check for "updating_screen" already set to avoid recursiveness. - */ - static void -update_prepare(void) -{ - cursor_off(); - updating_screen = TRUE; -#ifdef FEAT_GUI - /* Remove the cursor before starting to do anything, because scrolling may - * make it difficult to redraw the text under it. */ - if (gui.in_use) - gui_undraw_cursor(); -#endif -#ifdef FEAT_SEARCH_EXTRA - start_search_hl(); -#endif -} - -/* - * Finish updating one or more windows. - */ - static void -update_finish(void) -{ - if (redraw_cmdline) - showmode(); - -# ifdef FEAT_SEARCH_EXTRA - end_search_hl(); -# endif - - updating_screen = FALSE; - -# ifdef FEAT_GUI - gui_may_resize_shell(); - - /* Redraw the cursor and update the scrollbars when all screen updating is - * done. */ - if (gui.in_use) - { - out_flush(); /* required before updating the cursor */ - gui_update_cursor(FALSE, FALSE); - gui_update_scrollbars(FALSE); - } -# endif } #endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 286, +/**/ 285, /**/ 284,