# HG changeset patch # User vimboss # Date 1253722489 0 # Node ID 4f3857aa17853ab6c36005520ae723af92f50b9e # Parent 43a60ac87145f10d827e08b02c8241b359697740 updated for version 7.2-264 diff --git a/src/gui.c b/src/gui.c --- a/src/gui.c +++ b/src/gui.c @@ -1386,6 +1386,10 @@ gui_set_shellsize(mustset, fit_to_displa int min_height; int screen_w; int screen_h; +#ifdef HAVE_GTK2 + int un_maximize = mustset; + int did_adjust = 0; +#endif if (!gui.shell_created) return; @@ -1425,22 +1429,47 @@ gui_set_shellsize(mustset, fit_to_displa if (Columns < MIN_COLUMNS) Columns = MIN_COLUMNS; width = Columns * gui.char_width + base_width; +#ifdef HAVE_GTK2 + ++did_adjust; +#endif } if ((direction & RESIZE_VERT) && height > screen_h) { Rows = (screen_h - base_height) / gui.char_height; check_shellsize(); height = Rows * gui.char_height + base_height; +#ifdef HAVE_GTK2 + ++did_adjust; +#endif } +#ifdef HAVE_GTK2 + if (did_adjust == 2 || (width + gui.char_width >= screen_w + && height + gui.char_height >= screen_h)) + /* don't unmaximize if at maximum size */ + un_maximize = FALSE; +#endif } gui.num_cols = Columns; gui.num_rows = Rows; min_width = base_width + MIN_COLUMNS * gui.char_width; min_height = base_height + MIN_LINES * gui.char_height; -# ifdef FEAT_WINDOWS +#ifdef FEAT_WINDOWS min_height += tabline_height() * gui.char_height; -# endif +#endif + +#ifdef HAVE_GTK2 + if (un_maximize) + { + /* If the window size is smaller than the screen unmaximize the + * window, otherwise resizing won't work. */ + gui_mch_get_screen_dimensions(&screen_w, &screen_h); + if ((width + gui.char_width < screen_w + || height + gui.char_height * 2 < screen_h) + && gui_mch_maximized()) + gui_mch_unmaximize(); + } +#endif gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction); diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -4376,6 +4376,29 @@ force_shell_resize_idle(gpointer data) #endif #endif /* HAVE_GTK2 */ +#if defined(HAVE_GTK2) || defined(PROTO) +/* + * Return TRUE if the main window is maximized. + */ + int +gui_mch_maximized() +{ + return (gui.mainwin != NULL && gui.mainwin->window != NULL + && (gdk_window_get_state(gui.mainwin->window) + & GDK_WINDOW_STATE_MAXIMIZED)); +} + +/* + * Unmaximize the main window + */ + void +gui_mch_unmaximize() +{ + if (gui.mainwin != NULL) + gtk_window_unmaximize(GTK_WINDOW(gui.mainwin)); +} +#endif + /* * Set the windows size. */ diff --git a/src/proto/gui_gtk_x11.pro b/src/proto/gui_gtk_x11.pro --- a/src/proto/gui_gtk_x11.pro +++ b/src/proto/gui_gtk_x11.pro @@ -16,6 +16,8 @@ int gui_mch_open __ARGS((void)); void gui_mch_exit __ARGS((int rc)); int gui_mch_get_winpos __ARGS((int *x, int *y)); void gui_mch_set_winpos __ARGS((int x, int y)); +int gui_mch_maximized __ARGS((void)); +void gui_mch_unmaximize __ARGS((void)); void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction)); void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h)); void gui_mch_settitle __ARGS((char_u *title, char_u *icon)); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 264, +/**/ 263, /**/ 262,