patch 8.0.0299: a window resize is sometimes not taking effect v8.0.0299
authorBram Moolenaar <Bram@vim.org>
Fri, 3 Feb 2017 21:01:47 +0000 (22:01 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 3 Feb 2017 21:01:47 +0000 (22:01 +0100)
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.

src/gui.c
src/main.c
src/version.c

index 87b083958664a65ff9048f19241cd32c7d29d21f..203035f5d28525be52f075311627329fba1b3012 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -1459,6 +1459,8 @@ gui_resize_shell(int pixel_width, int pixel_height)
     }
 
 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
index f3c471a85270c2e685d821e11b67ed1207bca544..0ed94ae907bd1ebe3fcdf28f68fd25835d3bc1bb 100644 (file)
@@ -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 && (
index 93a59cd6350324758ba7d5209511c714d77d312a..fa51e5694440bfbaf7dd6adbfb894a7724eb3de7 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    299,
 /**/
     298,
 /**/