summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2009-09-23 16:14:49 +0000
committervimboss <devnull@localhost>2009-09-23 16:14:49 +0000
commitaaa1bf373f9428ecb1dc19df8057795c70023909 (patch)
treeb75925987f2f5279ec67ea670617a1118694b814
parent6529b346e678272d702cd5db3020723427ef2309 (diff)
downloadvim-aaa1bf373f9428ecb1dc19df8057795c70023909.tar.gz
updated for version 7.2-264v7.2.264v7-2-264
-rw-r--r--src/gui.c33
-rw-r--r--src/gui_gtk_x11.c23
-rw-r--r--src/proto/gui_gtk_x11.pro2
-rw-r--r--src/version.c2
4 files changed, 58 insertions, 2 deletions
diff --git a/src/gui.c b/src/gui.c
index c25f760e..48e7b0fb 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1386,6 +1386,10 @@ gui_set_shellsize(mustset, fit_to_display, direction)
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_display, direction)
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
index cb50d030..ad6fc25e 100644
--- 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
index 87ff6da4..93b65bf7 100644
--- 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
index 1f3f201d..3633057d 100644
--- 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,