Mercurial > vim
changeset 10819:cd179d7d0b5d v8.0.0299
patch 8.0.0299: a window resize is sometimes not taking effect
commit https://github.com/vim/vim/commit/6b40f303291be6b2fe524b5708e089773048c269
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 03 Feb 2017 22:15:04 +0100 |
parents | 9892ae5794e3 |
children | 37ad103a548a |
files | src/gui.c src/main.c src/version.c |
diffstat | 3 files changed, 24 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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 && (