]> granicus.if.org Git - vim/commitdiff
patch 8.0.1278: GUI window always resizes when adding scrollbar v8.0.1278
authorBram Moolenaar <Bram@vim.org>
Thu, 9 Nov 2017 17:33:29 +0000 (18:33 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 9 Nov 2017 17:33:29 +0000 (18:33 +0100)
Problem:    GUI window always resizes when adding/removing a scrollbar,
            toolbar, etc.
Solution:   Add the 'k' flag in 'guioptions' to keep the GUI window size and
            change the number of lines/columns instead. (Ychin, closes #703)

runtime/doc/options.txt
src/gui.c
src/gui_gtk_x11.c
src/gui_w32.c
src/option.h
src/version.c

index 6bd9f762fc3c01e943b19fe859cea16644ae9cd2..28b545721af5ef7b0fc9cb1cfdf2f4cd104aa856 100644 (file)
@@ -3939,7 +3939,13 @@ A jump table for the options with a short description can be found at |Q_op|.
                removing it after the GUI has started has no effect.
                                                                *'go-F'*
          'F'   Add a footer.  Only for Motif.  See |gui-footer|.
-
+                                                               *'go-k'*
+         'k'   Keep the GUI window size when adding/removing a scrollbar, or
+               toolbar, tabline, etc.  Instead, the behavior is similar to
+               when the window is maximized and will adjust 'lines' and
+               'columns' to fit to the window.  Without the 'k' flag Vim will
+               try to keep 'lines' and 'columns the same when adding and
+               removing GUI components.
 
                                                *'guipty'* *'noguipty'*
 'guipty'               boolean (default on)
index 8e48d3c2bc4192a316fb9c7c71b2d6f629e71747..74e2c838c39fe7a17a5442065f2d3672fd3a9e18 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -693,7 +693,7 @@ gui_init(void)
 #ifndef FEAT_GUI_GTK
     /* Set the shell size, adjusted for the screen size.  For GTK this only
      * works after the shell has been opened, thus it is further down. */
-    gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+    gui_set_shellsize(TRUE, TRUE, RESIZE_BOTH);
 #endif
 #if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
     /* Need to set the size of the menubar after all the menus have been
@@ -732,7 +732,7 @@ gui_init(void)
 # endif
 
        /* Now make sure the shell fits on the screen. */
-       gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+       gui_set_shellsize(TRUE, TRUE, RESIZE_BOTH);
 #endif
        /* When 'lines' was set while starting up the topframe may have to be
         * resized. */
@@ -909,7 +909,7 @@ gui_init_font(char_u *font_list, int fontset UNUSED)
 # endif
            gui_mch_set_font(gui.norm_font);
 #endif
-       gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+       gui_set_shellsize(TRUE, TRUE, RESIZE_BOTH);
     }
 
     return ret;
@@ -1553,10 +1553,12 @@ gui_get_shellsize(void)
  * Set the size of the Vim shell according to Rows and Columns.
  * If "fit_to_display" is TRUE then the size may be reduced to fit the window
  * on the screen.
+ * When "mustset" is TRUE the size was set by the user. When FALSE a UI
+ * component was added or removed (e.g., a scrollbar).
  */
     void
 gui_set_shellsize(
-    int                mustset UNUSED,         /* set by the user */
+    int                mustset UNUSED,
     int                fit_to_display,
     int                direction)              /* RESIZE_HOR, RESIZE_VER */
 {
@@ -1580,7 +1582,8 @@ gui_set_shellsize(
 #if defined(MSWIN) || defined(FEAT_GUI_GTK)
     /* If not setting to a user specified size and maximized, calculate the
      * number of characters that fit in the maximized window. */
-    if (!mustset && gui_mch_maximized())
+    if (!mustset && (vim_strchr(p_go, GO_KEEPWINSIZE) != NULL
+                                                      || gui_mch_maximized()))
     {
        gui_mch_newfont();
        return;
index 9be54b90e080ea9cba96bec70cea43cc93256b02..83b98e187fc38a83151f507ced1ca9947ec868fd 100644 (file)
@@ -2938,7 +2938,7 @@ mainwin_screen_changed_cb(GtkWidget  *widget,
     if (gui.norm_font != NULL)
     {
        gui_mch_init_font(p_guifont, FALSE);
-       gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
+       gui_set_shellsize(TRUE, FALSE, RESIZE_BOTH);
     }
 }
 
@@ -4909,8 +4909,9 @@ gui_mch_unmaximize(void)
 }
 
 /*
- * Called when the font changed while the window is maximized.  Compute the
- * new Rows and Columns.  This is like resizing the window.
+ * Called when the font changed while the window is maximized or GO_KEEPWINSIZE
+ * is set.  Compute the new Rows and Columns.  This is like resizing the
+ * window.
  */
     void
 gui_mch_newfont(void)
index 67895cca3e4451b0201c958762842ce2080fc751..52cadead62e8e6c0a1281e3cb160428672eb4cd0 100644 (file)
@@ -3385,8 +3385,9 @@ gui_mch_maximized(void)
 }
 
 /*
- * Called when the font changed while the window is maximized.  Compute the
- * new Rows and Columns.  This is like resizing the window.
+ * Called when the font changed while the window is maximized or GO_KEEPWINSIZE
+ * is set.  Compute the new Rows and Columns.  This is like resizing the
+ * window.
  */
     void
 gui_mch_newfont(void)
index 88eadae4c81fc43b6867ae23c39b4a4850b2815e..f9972f21acde1198092c6ab6fc3b4a44efed8d93 100644 (file)
 #define GO_TOOLBAR     'T'             /* add toolbar */
 #define GO_FOOTER      'F'             /* add footer */
 #define GO_VERTICAL    'v'             /* arrange dialog buttons vertically */
-#define GO_ALL         "aAbcefFghilmMprtTv" /* all possible flags for 'go' */
+#define GO_KEEPWINSIZE 'k'             /* keep GUI window size */
+#define GO_ALL         "aAbcefFghilmMprtTvk" /* all possible flags for 'go' */
 
 /* flags for 'comments' option */
 #define COM_NEST       'n'             /* comments strings nest */
index b5e45391786871796cf521ee9b6aaa6aad5300a2..bba2938b97843908e9c9a3b1623b49a7c1be0e5f 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1278,
 /**/
     1277,
 /**/