Permalink
Browse files

patch 8.0.1278: GUI window always resizes when adding scrollbar

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)
  • Loading branch information...
brammool committed Nov 9, 2017
1 parent 26d205d commit 8ac441576fd219fb7227349e228d5b68520b204a
Showing with 26 additions and 12 deletions.
  1. +7 −1 runtime/doc/options.txt
  2. +8 −5 src/gui.c
  3. +4 −3 src/gui_gtk_x11.c
  4. +3 −2 src/gui_w32.c
  5. +2 −1 src/option.h
  6. +2 −0 src/version.c
View
@@ -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)
View
@@ -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;
View
@@ -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)
View
@@ -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)
View
@@ -235,7 +235,8 @@
#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 */
View
@@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1278,
/**/
1277,
/**/

0 comments on commit 8ac4415

Please sign in to comment.