# HG changeset patch # User Christian Brabandt # Date 1486156504 -3600 # Node ID cd179d7d0b5dc665169fa98eb8fba164670fb515 # Parent 9892ae5794e3f0fab6f651c8d2709b20124db78b patch 8.0.0299: a window resize is sometimes not taking effect commit https://github.com/vim/vim/commit/6b40f303291be6b2fe524b5708e089773048c269 Author: Bram Moolenaar Date: Fri Feb 3 22:01:47 2017 +0100 patch 8.0.0299: a window resize is sometimes not taking effect Problem: When the GUI window is resized Vim does not always take over the new size. (Luchr) Solution: Reset new_p_guifont in gui_resize_shell(). Call gui_may_resize_shell() in the main loop. diff --git a/src/gui.c b/src/gui.c --- a/src/gui.c +++ b/src/gui.c @@ -1459,6 +1459,8 @@ gui_resize_shell(int pixel_width, int pi } again: + new_pixel_width = 0; + new_pixel_height = 0; busy = TRUE; /* Flush pending output before redrawing */ @@ -1468,8 +1470,8 @@ again: gui.num_rows = (pixel_height - gui_get_base_height()) / gui.char_height; gui_position_components(pixel_width); - gui_reset_scroll_region(); + /* * At the "more" and ":confirm" prompt there is no redraw, put the cursor * at the last line here (why does it have to be one row too low?). @@ -1491,17 +1493,22 @@ again: busy = FALSE; - /* - * We could have been called again while redrawing the screen. - * Need to do it all again with the latest size then. - */ + /* We may have been called again while redrawing the screen. + * Need to do it all again with the latest size then. But only if the size + * actually changed. */ if (new_pixel_height) { - pixel_width = new_pixel_width; - pixel_height = new_pixel_height; - new_pixel_width = 0; - new_pixel_height = 0; - goto again; + if (pixel_width == new_pixel_width && pixel_height == new_pixel_height) + { + new_pixel_width = 0; + new_pixel_height = 0; + } + else + { + pixel_width = new_pixel_width; + pixel_height = new_pixel_height; + goto again; + } } } @@ -1511,18 +1518,10 @@ again: void gui_may_resize_shell(void) { - int h, w; - if (new_pixel_height) - { /* careful: gui_resize_shell() may postpone the resize again if we * were called indirectly by it */ - w = new_pixel_width; - h = new_pixel_height; - new_pixel_width = 0; - new_pixel_height = 0; - gui_resize_shell(w, h); - } + gui_resize_shell(new_pixel_width, new_pixel_height); } int diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -1118,6 +1118,10 @@ main_loop( skip_redraw = FALSE; else if (do_redraw || stuff_empty()) { +# ifdef FEAT_GUI + /* If ui_breakcheck() was used a resize may have been postponed. */ + gui_may_resize_shell(); +# endif #if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL) /* Trigger CursorMoved if the cursor moved. */ if (!finish_op && ( 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 */ /**/ + 299, +/**/ 298, /**/ 297,