summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-11-09 18:33:29 +0100
committerBram Moolenaar <Bram@vim.org>2017-11-09 18:33:29 +0100
commit8ac441576fd219fb7227349e228d5b68520b204a (patch)
tree8deb339c08aeba2ab92c7b77922960c7b226004e
parent26d205dcd886b48713f22cbdbf2a8e55400083dc (diff)
downloadvim-git-8ac441576fd219fb7227349e228d5b68520b204a.tar.gz
patch 8.0.1278: GUI window always resizes when adding scrollbarv8.0.1278
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)
-rw-r--r--runtime/doc/options.txt8
-rw-r--r--src/gui.c13
-rw-r--r--src/gui_gtk_x11.c7
-rw-r--r--src/gui_w32.c5
-rw-r--r--src/option.h3
-rw-r--r--src/version.c2
6 files changed, 26 insertions, 12 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 6bd9f762f..28b545721 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -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)
diff --git a/src/gui.c b/src/gui.c
index 8e48d3c2b..74e2c838c 100644
--- 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;
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 9be54b90e..83b98e187 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -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)
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 67895cca3..52cadead6 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -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)
diff --git a/src/option.h b/src/option.h
index 88eadae4c..f9972f21a 100644
--- a/src/option.h
+++ b/src/option.h
@@ -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 */
diff --git a/src/version.c b/src/version.c
index b5e453917..bba2938b9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1278,
+/**/
1277,
/**/
1276,