Karsten Hopp 5f528d
To: vim-dev@vim.org
Karsten Hopp 5f528d
Subject: Patch 7.2.264
Karsten Hopp 5f528d
Fcc: outbox
Karsten Hopp 5f528d
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 5f528d
Mime-Version: 1.0
Karsten Hopp 5f528d
Content-Type: text/plain; charset=UTF-8
Karsten Hopp 5f528d
Content-Transfer-Encoding: 8bit
Karsten Hopp 5f528d
------------
Karsten Hopp 5f528d
Karsten Hopp 5f528d
Patch 7.2.264
Karsten Hopp 5f528d
Problem:    GTK2: When the Vim window is maximized setting 'columns' or
Karsten Hopp 5f528d
	    'lines' doesn't work.
Karsten Hopp 5f528d
Solution:   Unmaximize the window before setting the size. (Vitaly Minko)
Karsten Hopp 5f528d
Files:	    src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
Karsten Hopp 5f528d
Karsten Hopp 5f528d
Karsten Hopp 5f528d
*** ../vim-7.2.263/src/gui.c	2009-07-29 11:10:31.000000000 +0200
Karsten Hopp 5f528d
--- src/gui.c	2009-09-23 16:28:09.000000000 +0200
Karsten Hopp 5f528d
***************
Karsten Hopp 5f528d
*** 1386,1391 ****
Karsten Hopp 5f528d
--- 1386,1395 ----
Karsten Hopp 5f528d
      int		min_height;
Karsten Hopp 5f528d
      int		screen_w;
Karsten Hopp 5f528d
      int		screen_h;
Karsten Hopp 5f528d
+ #ifdef HAVE_GTK2
Karsten Hopp 5f528d
+     int		un_maximize = mustset;
Karsten Hopp 5f528d
+     int         did_adjust = 0;
Karsten Hopp 5f528d
+ #endif
Karsten Hopp 5f528d
  
Karsten Hopp 5f528d
      if (!gui.shell_created)
Karsten Hopp 5f528d
  	return;
Karsten Hopp 5f528d
***************
Karsten Hopp 5f528d
*** 1425,1446 ****
Karsten Hopp 5f528d
  	    if (Columns < MIN_COLUMNS)
Karsten Hopp 5f528d
  		Columns = MIN_COLUMNS;
Karsten Hopp 5f528d
  	    width = Columns * gui.char_width + base_width;
Karsten Hopp 5f528d
  	}
Karsten Hopp 5f528d
  	if ((direction & RESIZE_VERT) && height > screen_h)
Karsten Hopp 5f528d
  	{
Karsten Hopp 5f528d
  	    Rows = (screen_h - base_height) / gui.char_height;
Karsten Hopp 5f528d
  	    check_shellsize();
Karsten Hopp 5f528d
  	    height = Rows * gui.char_height + base_height;
Karsten Hopp 5f528d
  	}
Karsten Hopp 5f528d
      }
Karsten Hopp 5f528d
      gui.num_cols = Columns;
Karsten Hopp 5f528d
      gui.num_rows = Rows;
Karsten Hopp 5f528d
  
Karsten Hopp 5f528d
      min_width = base_width + MIN_COLUMNS * gui.char_width;
Karsten Hopp 5f528d
      min_height = base_height + MIN_LINES * gui.char_height;
Karsten Hopp 5f528d
! # ifdef FEAT_WINDOWS
Karsten Hopp 5f528d
      min_height += tabline_height() * gui.char_height;
Karsten Hopp 5f528d
! # endif
Karsten Hopp 5f528d
  
Karsten Hopp 5f528d
      gui_mch_set_shellsize(width, height, min_width, min_height,
Karsten Hopp 5f528d
  					  base_width, base_height, direction);
Karsten Hopp 5f528d
--- 1429,1475 ----
Karsten Hopp 5f528d
  	    if (Columns < MIN_COLUMNS)
Karsten Hopp 5f528d
  		Columns = MIN_COLUMNS;
Karsten Hopp 5f528d
  	    width = Columns * gui.char_width + base_width;
Karsten Hopp 5f528d
+ #ifdef HAVE_GTK2
Karsten Hopp 5f528d
+ 	    ++did_adjust;
Karsten Hopp 5f528d
+ #endif
Karsten Hopp 5f528d
  	}
Karsten Hopp 5f528d
  	if ((direction & RESIZE_VERT) && height > screen_h)
Karsten Hopp 5f528d
  	{
Karsten Hopp 5f528d
  	    Rows = (screen_h - base_height) / gui.char_height;
Karsten Hopp 5f528d
  	    check_shellsize();
Karsten Hopp 5f528d
  	    height = Rows * gui.char_height + base_height;
Karsten Hopp 5f528d
+ #ifdef HAVE_GTK2
Karsten Hopp 5f528d
+ 	    ++did_adjust;
Karsten Hopp 5f528d
+ #endif
Karsten Hopp 5f528d
  	}
Karsten Hopp 5f528d
+ #ifdef HAVE_GTK2
Karsten Hopp 5f528d
+ 	if (did_adjust == 2 || (width + gui.char_width >= screen_w
Karsten Hopp 5f528d
+ 				     && height + gui.char_height >= screen_h))
Karsten Hopp 5f528d
+ 	    /* don't unmaximize if at maximum size */
Karsten Hopp 5f528d
+ 	    un_maximize = FALSE;
Karsten Hopp 5f528d
+ #endif
Karsten Hopp 5f528d
      }
Karsten Hopp 5f528d
      gui.num_cols = Columns;
Karsten Hopp 5f528d
      gui.num_rows = Rows;
Karsten Hopp 5f528d
  
Karsten Hopp 5f528d
      min_width = base_width + MIN_COLUMNS * gui.char_width;
Karsten Hopp 5f528d
      min_height = base_height + MIN_LINES * gui.char_height;
Karsten Hopp 5f528d
! #ifdef FEAT_WINDOWS
Karsten Hopp 5f528d
      min_height += tabline_height() * gui.char_height;
Karsten Hopp 5f528d
! #endif
Karsten Hopp 5f528d
! 
Karsten Hopp 5f528d
! #ifdef HAVE_GTK2
Karsten Hopp 5f528d
!     if (un_maximize)
Karsten Hopp 5f528d
!     {
Karsten Hopp 5f528d
! 	/* If the window size is smaller than the screen unmaximize the
Karsten Hopp 5f528d
! 	 * window, otherwise resizing won't work. */
Karsten Hopp 5f528d
! 	gui_mch_get_screen_dimensions(&screen_w, &screen_h);
Karsten Hopp 5f528d
! 	if ((width + gui.char_width < screen_w
Karsten Hopp 5f528d
! 				   || height + gui.char_height * 2 < screen_h)
Karsten Hopp 5f528d
! 		&& gui_mch_maximized())
Karsten Hopp 5f528d
! 	    gui_mch_unmaximize();
Karsten Hopp 5f528d
!     }
Karsten Hopp 5f528d
! #endif
Karsten Hopp 5f528d
  
Karsten Hopp 5f528d
      gui_mch_set_shellsize(width, height, min_width, min_height,
Karsten Hopp 5f528d
  					  base_width, base_height, direction);
Karsten Hopp 5f528d
*** ../vim-7.2.263/src/gui_gtk_x11.c	2009-09-23 17:35:17.000000000 +0200
Karsten Hopp 5f528d
--- src/gui_gtk_x11.c	2009-09-23 15:43:52.000000000 +0200
Karsten Hopp 5f528d
***************
Karsten Hopp 5f528d
*** 4376,4381 ****
Karsten Hopp 5f528d
--- 4376,4404 ----
Karsten Hopp 5f528d
  #endif
Karsten Hopp 5f528d
  #endif /* HAVE_GTK2 */
Karsten Hopp 5f528d
  
Karsten Hopp 5f528d
+ #if defined(HAVE_GTK2) || defined(PROTO)
Karsten Hopp 5f528d
+ /*
Karsten Hopp 5f528d
+  * Return TRUE if the main window is maximized.
Karsten Hopp 5f528d
+  */
Karsten Hopp 5f528d
+     int
Karsten Hopp 5f528d
+ gui_mch_maximized()
Karsten Hopp 5f528d
+ {
Karsten Hopp 5f528d
+     return (gui.mainwin != NULL && gui.mainwin->window != NULL
Karsten Hopp 5f528d
+ 	    && (gdk_window_get_state(gui.mainwin->window)
Karsten Hopp 5f528d
+ 					       & GDK_WINDOW_STATE_MAXIMIZED));
Karsten Hopp 5f528d
+ }
Karsten Hopp 5f528d
+ 
Karsten Hopp 5f528d
+ /*
Karsten Hopp 5f528d
+  * Unmaximize the main window
Karsten Hopp 5f528d
+  */
Karsten Hopp 5f528d
+     void
Karsten Hopp 5f528d
+ gui_mch_unmaximize()
Karsten Hopp 5f528d
+ {
Karsten Hopp 5f528d
+     if (gui.mainwin != NULL)
Karsten Hopp 5f528d
+ 	gtk_window_unmaximize(GTK_WINDOW(gui.mainwin));
Karsten Hopp 5f528d
+ }
Karsten Hopp 5f528d
+ #endif
Karsten Hopp 5f528d
+ 
Karsten Hopp 5f528d
  /*
Karsten Hopp 5f528d
   * Set the windows size.
Karsten Hopp 5f528d
   */
Karsten Hopp 5f528d
*** ../vim-7.2.263/src/proto/gui_gtk_x11.pro	2007-05-05 19:18:54.000000000 +0200
Karsten Hopp 5f528d
--- src/proto/gui_gtk_x11.pro	2009-09-23 15:43:45.000000000 +0200
Karsten Hopp 5f528d
***************
Karsten Hopp 5f528d
*** 16,21 ****
Karsten Hopp 5f528d
--- 16,23 ----
Karsten Hopp 5f528d
  void gui_mch_exit __ARGS((int rc));
Karsten Hopp 5f528d
  int gui_mch_get_winpos __ARGS((int *x, int *y));
Karsten Hopp 5f528d
  void gui_mch_set_winpos __ARGS((int x, int y));
Karsten Hopp 5f528d
+ int gui_mch_maximized __ARGS((void));
Karsten Hopp 5f528d
+ void gui_mch_unmaximize __ARGS((void));
Karsten Hopp 5f528d
  void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
Karsten Hopp 5f528d
  void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
Karsten Hopp 5f528d
  void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
Karsten Hopp 5f528d
*** ../vim-7.2.263/src/version.c	2009-09-23 17:35:17.000000000 +0200
Karsten Hopp 5f528d
--- src/version.c	2009-09-23 18:12:21.000000000 +0200
Karsten Hopp 5f528d
***************
Karsten Hopp 5f528d
*** 678,679 ****
Karsten Hopp 5f528d
--- 678,681 ----
Karsten Hopp 5f528d
  {   /* Add new patch number below this line */
Karsten Hopp 5f528d
+ /**/
Karsten Hopp 5f528d
+     264,
Karsten Hopp 5f528d
  /**/
Karsten Hopp 5f528d
Karsten Hopp 5f528d
-- 
Karsten Hopp 5f528d
hundred-and-one symptoms of being an internet addict:
Karsten Hopp 5f528d
268. You get up in the morning and go online before getting your coffee.
Karsten Hopp 5f528d
Karsten Hopp 5f528d
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 5f528d
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 5f528d
\\\        download, build and distribute -- http://www.A-A-P.org        ///
Karsten Hopp 5f528d
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///