changeset 811:d2c169a725c8

updated for version 7.0c01
author vimboss
date Mon, 27 Mar 2006 20:55:21 +0000
parents 9f345c48220b
children 68c15f2c7d3f
files runtime/doc/usr_44.txt src/feature.h src/gui.c src/gui.h src/gui_athena.c src/gui_motif.c src/gui_riscos.c src/gui_w16.c src/gui_w48.c src/mbyte.c src/proto/gui.pro src/proto/gui_gtk_x11.pro src/proto/gui_photon.pro src/proto/gui_w16.pro src/proto/gui_w32.pro src/vim.h
diffstat 16 files changed, 146 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/usr_44.txt
+++ b/runtime/doc/usr_44.txt
@@ -1,4 +1,4 @@
-*usr_44.txt*	For Vim version 7.0c.  Last change: 2005 Apr 01
+*usr_44.txt*	For Vim version 7.0c.  Last change: 2006 Mar 27
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -689,26 +689,21 @@ Do not include anything that is a user p
 Do not include mappings or abbreviations.  Only include setting 'iskeyword' if
 it is really necessary for recognizing keywords.
 
-Avoid using specific colors.  Link to the standard highlight groups whenever
-possible.  Don't forget that some people use a different background color, or
-have only eight colors available.
-For backwards compatibility with Vim 5.8 this construction is used: >
+To allow users select their own preferred colors, make a different group name
+for every kind of highlighted item.  Then link each of them to one of the
+standard highlight groups.  That will make it work with every color scheme.
+If you select specific colors it will look bad with some color schemes.  And
+don't forget that some people use a different background color, or have only
+eight colors available.
 
-	if version >= 508 || !exists("did_c_syn_inits")
-	  if version < 508
-	    let did_c_syn_inits = 1
-	    command -nargs=+ HiLink hi link <args>
-	  else
-	    command -nargs=+ HiLink hi def link <args>
-	  endif
+For the linking use "hi def link", so that the user can select different
+highlighting before your syntax file is loaded.  Example: >
 
-	  HiLink nameString	String
-	  HiLink nameNumber	Number
+	  hi def link nameString	String
+	  hi def link nameNumber	Number
+	  hi def link nameCommand	Statement
 	  ... etc ...
 
-	  delcommand HiLink
-	endif
-
 Add the "display" argument to items that are not used when syncing, to speed
 up scrolling backwards and CTRL-L.
 
--- a/src/feature.h
+++ b/src/feature.h
@@ -754,7 +754,7 @@
  * GUI tabline
  */
 #if defined(FEAT_WINDOWS) && (defined(FEAT_GUI_GTK) \
-	|| (defined(FEAT_GUI_MSWIN) && WINVER > 0x0400))
+	|| (defined(FEAT_GUI_MSWIN) && (!defined(_MSC_VER) || _MSC_VER > 1020)))
 # define FEAT_GUI_TABLINE
 #endif
 
--- a/src/gui.c
+++ b/src/gui.c
@@ -521,7 +521,7 @@ gui_init()
 #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);
+    gui_set_shellsize(FALSE, 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
@@ -547,7 +547,7 @@ gui_init()
 	/* Give GTK+ a chance to put all widget's into place. */
 	gui_mch_update();
 	/* Now make sure the shell fits on the screen. */
-	gui_set_shellsize(FALSE, TRUE);
+	gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
 #endif
 	/* When 'lines' was set while starting up the topframe may have to be
 	 * resized. */
@@ -741,7 +741,7 @@ gui_init_font(font_list, fontset)
 #else
 		FALSE
 #endif
-		);
+		, RESIZE_BOTH);
     }
 
     return ret;
@@ -1354,9 +1354,10 @@ gui_get_shellsize()
  */
 /*ARGSUSED*/
     void
-gui_set_shellsize(mustset, fit_to_display)
+gui_set_shellsize(mustset, fit_to_display, direction)
     int		mustset;		/* set by the user */
     int		fit_to_display;
+    int		direction;		/* RESIZE_HOR, RESIZE_VER */
 {
     int		base_width;
     int		base_height;
@@ -1399,14 +1400,14 @@ gui_set_shellsize(mustset, fit_to_displa
     if (fit_to_display)
     {
 	gui_mch_get_screen_dimensions(&screen_w, &screen_h);
-	if (width > screen_w)
+	if ((direction & RESIZE_HOR) && width > screen_w)
 	{
 	    Columns = (screen_w - base_width) / gui.char_width;
 	    if (Columns < MIN_COLUMNS)
 		Columns = MIN_COLUMNS;
 	    width = Columns * gui.char_width + base_width;
 	}
-	if (height > screen_h)
+	if ((direction & RESIZE_VERT) && height > screen_h)
 	{
 	    Rows = (screen_h - base_height) / gui.char_height;
 	    check_shellsize();
@@ -1423,7 +1424,7 @@ gui_set_shellsize(mustset, fit_to_displa
 # endif
 
     gui_mch_set_shellsize(width, height, min_width, min_height,
-						     base_width, base_height);
+					  base_width, base_height, direction);
     if (fit_to_display)
     {
 	int	    x, y;
@@ -3087,9 +3088,7 @@ gui_menu_cb(menu)
 }
 #endif
 
-#ifndef FEAT_WINDOWS
-static int		    prev_which_scrollbars[3];
-#endif
+static int	prev_which_scrollbars[3];
 
 /*
  * Set which components are present.
@@ -3203,7 +3202,7 @@ gui_init_which_components(oldval)
 
     if (gui.in_use)
     {
-	need_set_size = FALSE;
+	need_set_size = 0;
 	fix_size = FALSE;
 
 #ifdef FEAT_GUI_TABLINE
@@ -3217,7 +3216,7 @@ gui_init_which_components(oldval)
 	    i = Rows;
 	    gui_update_tabline();
 	    Rows = i;
-	    need_set_size = TRUE;
+	    need_set_size = RESIZE_VERT;
 	    if (using_tabline)
 		fix_size = TRUE;
 	    if (!gui_use_tabline())
@@ -3227,11 +3226,14 @@ gui_init_which_components(oldval)
 
 	for (i = 0; i < 3; i++)
 	{
-	    if (gui.which_scrollbars[i] !=
+	    /* The scrollbar needs to be updated when it is shown/unshown and
+	     * when switching tab pages.  But the size only changes when it's
+	     * shown/unshown.  Thus we need two places to remember whether a
+	     * scrollbar is there or not. */
+	    if (gui.which_scrollbars[i] != prev_which_scrollbars[i]
 #ifdef FEAT_WINDOWS
-		    curtab->tp_prev_which_scrollbars[i]
-#else
-		    prev_which_scrollbars[i]
+		    || gui.which_scrollbars[i]
+					!= curtab->tp_prev_which_scrollbars[i]
 #endif
 		    )
 	    {
@@ -3245,16 +3247,20 @@ gui_init_which_components(oldval)
 			gui_do_scrollbar(wp, i, gui.which_scrollbars[i]);
 		    }
 		}
-		need_set_size = TRUE;
-		if (gui.which_scrollbars[i])
-		    fix_size = TRUE;
+		if (gui.which_scrollbars[i] != prev_which_scrollbars[i])
+		{
+		    if (i == SBAR_BOTTOM)
+			need_set_size = RESIZE_VERT;
+		    else
+			need_set_size = RESIZE_HOR;
+		    if (gui.which_scrollbars[i])
+			fix_size = TRUE;
+		}
 	    }
 #ifdef FEAT_WINDOWS
-	    curtab->tp_prev_which_scrollbars[i]
-#else
-	    prev_which_scrollbars[i]
+	    curtab->tp_prev_which_scrollbars[i] = gui.which_scrollbars[i];
 #endif
-						= gui.which_scrollbars[i];
+	    prev_which_scrollbars[i] = gui.which_scrollbars[i];
 	}
 
 #ifdef FEAT_MENU
@@ -3266,7 +3272,7 @@ gui_init_which_components(oldval)
 	    gui_mch_enable_menu(gui.menu_is_active);
 	    Rows = i;
 	    prev_menu_is_active = gui.menu_is_active;
-	    need_set_size = TRUE;
+	    need_set_size = RESIZE_VERT;
 	    if (gui.menu_is_active)
 		fix_size = TRUE;
 	}
@@ -3277,7 +3283,7 @@ gui_init_which_components(oldval)
 	{
 	    gui_mch_show_toolbar(using_toolbar);
 	    prev_toolbar = using_toolbar;
-	    need_set_size = TRUE;
+	    need_set_size = RESIZE_VERT;
 	    if (using_toolbar)
 		fix_size = TRUE;
 	}
@@ -3287,7 +3293,7 @@ gui_init_which_components(oldval)
 	{
 	    gui_mch_enable_footer(using_footer);
 	    prev_footer = using_footer;
-	    need_set_size = TRUE;
+	    need_set_size = RESIZE_VERT;
 	    if (using_footer)
 		fix_size = TRUE;
 	}
@@ -3307,7 +3313,7 @@ gui_init_which_components(oldval)
 	    /* Adjust the size of the window to make the text area keep the
 	     * same size and to avoid that part of our window is off-screen
 	     * and a scrollbar can't be used, for example. */
-	    gui_set_shellsize(FALSE, fix_size);
+	    gui_set_shellsize(FALSE, fix_size, need_set_size);
 
 #ifdef FEAT_GUI_GTK
 	    /* GTK has the annoying habit of sending us resize events when
@@ -3379,7 +3385,7 @@ gui_update_tabline()
 	/* When the tabs change from hidden to shown or from shown to
 	 * hidden the size of the text area should remain the same. */
 	if (!showit != !shown)
-	    gui_set_shellsize(FALSE, showit);
+	    gui_set_shellsize(FALSE, showit, RESIZE_VERT);
     }
 }
 
--- a/src/gui.h
+++ b/src/gui.h
@@ -159,7 +159,7 @@
 #define TOOLBAR_BORDER_HEIGHT	12  /* room above+below buttons for MSWindows */
 
 #ifdef FEAT_GUI_MSWIN
-# define TABLINE_HEIGHT 24
+# define TABLINE_HEIGHT 22
 #endif
 
 #if defined(NO_CONSOLE) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
--- a/src/gui_athena.c
+++ b/src/gui_athena.c
@@ -1041,7 +1041,7 @@ gui_mch_new_menu_font()
 #endif
 		     );
     }
-    gui_set_shellsize(FALSE, TRUE);
+    gui_set_shellsize(FALSE, TRUE, RESIZE_VERT);
     ui_new_shellsize();
     if (oldpuller != None)
 	XFreePixmap(gui.dpy, oldpuller);
@@ -1418,7 +1418,7 @@ gui_mch_show_toolbar(int showit)
 
 	XtUnmanageChild(toolBar);
     }
-    gui_set_shellsize(FALSE, FALSE);
+    gui_set_shellsize(FALSE, FALSE, RESIZE_VERT);
 }
 
 
--- a/src/gui_motif.c
+++ b/src/gui_motif.c
@@ -1233,7 +1233,7 @@ gui_mch_new_menu_font()
 #endif
 		     );
     }
-    gui_set_shellsize(FALSE, TRUE);
+    gui_set_shellsize(FALSE, TRUE, RESIZE_VERT);
     ui_new_shellsize();
 }
 
@@ -2799,7 +2799,7 @@ gui_mch_show_toolbar(int showit)
 
 	XtUnmanageChild(XtParent(toolBar));
     }
-    gui_set_shellsize(FALSE, FALSE);
+    gui_set_shellsize(FALSE, FALSE, RESIZE_VERT);
 }
 
 /*
--- a/src/gui_riscos.c
+++ b/src/gui_riscos.c
@@ -692,13 +692,14 @@ gui_mch_set_winpos(int x, int y)
 }
 
     void
-gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height)
+gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
     int width;		/* In OS units */
     int height;
     int min_width;	/* Smallest permissable window size (ignored) */
     int min_height;
     int base_width;	/* Space for scroll bars, etc */
     int base_height;
+    int direction;
 {
     int s_width, s_height;
     int block[] = {
--- a/src/gui_w16.c
+++ b/src/gui_w16.c
@@ -128,7 +128,7 @@ gui_mswin_get_menu_height(
     if (fix_window && menu_height != old_menu_height)
     {
 	old_menu_height = menu_height;
-	gui_set_shellsize(FALSE, FALSE);
+	gui_set_shellsize(FALSE, FALSE, RESIZE_VERT);
     }
 
     return menu_height;
@@ -488,7 +488,8 @@ gui_mch_init(void)
  */
     void
 gui_mch_set_shellsize(int width, int height,
-	int min_width, int min_height, int base_width, int base_height)
+	int min_width, int min_height, int base_width, int base_height,
+	int direction)
 {
     RECT	workarea_rect;
     int		win_width, win_height;
@@ -528,16 +529,17 @@ gui_mch_set_shellsize(int width, int hei
 			;
 
     /* if the window is going off the screen, move it on to the screen */
-    if (win_xpos + win_width > workarea_rect.right)
+    if ((direction & RESIZE_HOR) && win_xpos + win_width > workarea_rect.right)
 	win_xpos = workarea_rect.right - win_width;
 
-    if (win_xpos < workarea_rect.left)
+    if ((direction & RESIZE_HOR) && win_xpos < workarea_rect.left)
 	win_xpos = workarea_rect.left;
 
-    if (win_ypos + win_height > workarea_rect.bottom)
+    if ((direction & RESIZE_VERT)
+			       && win_ypos + win_height > workarea_rect.bottom)
 	win_ypos = workarea_rect.bottom - win_height;
 
-    if (win_ypos < workarea_rect.top)
+    if ((direction & RESIZE_VERT) && win_ypos < workarea_rect.top)
 	win_ypos = workarea_rect.top;
 
     /* set window position */
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -1113,14 +1113,18 @@ gui_mch_set_text_area_pos(int x, int y, 
 #if defined(FEAT_GUI_TABLINE)
     if (showing_tabline)
     {
-	int top = 0;
+	int	top = 0;
+	RECT	rect;
 
 #ifdef FEAT_TOOLBAR
 	if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
 	    top = TOOLBAR_BUTTON_HEIGHT + TOOLBAR_BORDER_HEIGHT;
 #endif
 
-	MoveWindow(s_tabhwnd, 0, top, w, TABLINE_HEIGHT, TRUE);
+	GetWindowRect(s_hwnd, &rect);
+	SetRect(&rect, 0, top, rect.right, TABLINE_HEIGHT);
+	TabCtrl_AdjustRect(s_tabhwnd, TRUE, &rect);
+	MoveWindow(s_tabhwnd, 0, top, rect.right, rect.bottom, TRUE);
     }
 #endif
 
@@ -2176,6 +2180,68 @@ gui_mch_show_toolbar(int showit)
 #endif
 
 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
+    static void
+show_tabline_popup_menu(void)
+{
+    HMENU	    tab_pmenu;
+    MENUITEMINFO    minfo;
+    long	    rval;
+    POINT	    pt;
+    char_u	    string[3];
+
+    tab_pmenu = CreatePopupMenu();
+    if (tab_pmenu == NULL)
+	return;
+
+    minfo.cbSize = sizeof(MENUITEMINFO);
+    minfo.fMask = MIIM_TYPE|MIIM_ID;
+    minfo.fType = MFT_STRING;
+
+    minfo.dwTypeData = _("Close tab");
+    minfo.wID = TABLINE_MENU_CLOSE;
+    InsertMenuItem(tab_pmenu, TABLINE_MENU_CLOSE, FALSE, &minfo);
+
+    minfo.dwTypeData = _("New tab");
+    minfo.wID = TABLINE_MENU_NEW;
+    InsertMenuItem(tab_pmenu, TABLINE_MENU_NEW, FALSE, &minfo);
+
+    minfo.dwTypeData = _("Open tab...");
+    minfo.wID = TABLINE_MENU_OPEN;
+    InsertMenuItem(tab_pmenu, TABLINE_MENU_OPEN, FALSE, &minfo);
+
+    GetCursorPos(&pt);
+    rval = TrackPopupMenuEx(tab_pmenu, TPM_RETURNCMD, pt.x, pt.y, s_tabhwnd,
+									NULL);
+
+    DestroyMenu(tab_pmenu);
+
+    /* Add the string cmd into input buffer */
+    if (rval > 0)
+    {
+	TCHITTESTINFO htinfo;
+	int idx;
+
+	if (ScreenToClient(s_tabhwnd, &pt) == 0)
+	    return;
+
+	htinfo.pt.x = pt.x;
+	htinfo.pt.y = pt.y;
+	idx = TabCtrl_HitTest(s_tabhwnd, &htinfo);
+	if (idx == -1)
+	    idx = 0;
+	else
+	    idx += 1;
+
+	string[0] = CSI;
+	string[1] = KS_TABMENU;
+	string[2] = KE_FILLER;
+	add_to_input_buf(string, 3);
+	string[0] = idx;
+	string[1] = (char_u)(long)rval;
+	add_to_input_buf_csi(string, 2);
+    }
+}
+
 /*
  * Show or hide the tabline.
  */
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -4899,7 +4899,7 @@ xim_instantiate_cb(display, client_data,
 	return;
 
     xim_real_init(x11_window, x11_display);
-    gui_set_shellsize(FALSE, FALSE);
+    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
     if (xic != NULL)
 	XUnregisterIMInstantiateCallback(x11_display, NULL, NULL, NULL,
 					 xim_instantiate_cb, NULL);
@@ -4923,7 +4923,7 @@ xim_destroy_cb(im, client_data, call_dat
     xic = NULL;
     status_area_enabled = FALSE;
 
-    gui_set_shellsize(FALSE, FALSE);
+    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
 
     XRegisterIMInstantiateCallback(x11_display, NULL, NULL, NULL,
 				   xim_instantiate_cb, NULL);
@@ -4947,7 +4947,7 @@ xim_init()
     if (xim_real_init(x11_window, x11_display))
 	return;
 
-    gui_set_shellsize(FALSE, FALSE);
+    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
 
 #ifdef USE_X11R6_XIM
     XRegisterIMInstantiateCallback(x11_display, NULL, NULL, NULL,
@@ -5162,7 +5162,7 @@ xim_real_init(x11_window, x11_display)
 	    status_area_enabled = TRUE;
 	}
 	else
-	    gui_set_shellsize(FALSE, FALSE);
+	    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
     }
     else
     {
--- a/src/proto/gui.pro
+++ b/src/proto/gui.pro
@@ -15,7 +15,7 @@ extern int gui_get_base_height __ARGS((v
 extern void gui_resize_shell __ARGS((int pixel_width, int pixel_height));
 extern void gui_may_resize_shell __ARGS((void));
 extern int gui_get_shellsize __ARGS((void));
-extern void gui_set_shellsize __ARGS((int mustset, int fit_to_display));
+extern void gui_set_shellsize __ARGS((int mustset, int fit_to_display, int direction));
 extern void gui_new_shellsize __ARGS((void));
 extern void gui_reset_scroll_region __ARGS((void));
 extern void gui_start_highlight __ARGS((int mask));
--- a/src/proto/gui_gtk_x11.pro
+++ b/src/proto/gui_gtk_x11.pro
@@ -16,7 +16,7 @@ extern int gui_mch_open __ARGS((void));
 extern void gui_mch_exit __ARGS((int rc));
 extern int gui_mch_get_winpos __ARGS((int *x, int *y));
 extern void gui_mch_set_winpos __ARGS((int x, int y));
-extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
 extern void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
 extern void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
 extern void gui_mch_enable_menu __ARGS((int showit));
--- a/src/proto/gui_photon.pro
+++ b/src/proto/gui_photon.pro
@@ -11,7 +11,7 @@ extern char_u *gui_mch_browse __ARGS((in
 extern int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield));
 extern int gui_mch_get_winpos __ARGS((int *x, int *y));
 extern void gui_mch_set_winpos __ARGS((int x, int y));
-extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
 extern void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
 extern void gui_mch_iconify __ARGS((void));
 extern void gui_mch_set_foreground __ARGS((void));
--- a/src/proto/gui_w16.pro
+++ b/src/proto/gui_w16.pro
@@ -59,7 +59,7 @@ extern char_u *gui_mch_browse __ARGS((in
 extern int get_cmd_args __ARGS((char *prog, char *cmdline, char ***argvp, char **tofree));
 extern void gui_mch_prepare __ARGS((int *argc, char **argv));
 extern int gui_mch_init __ARGS((void));
-extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
 extern void gui_mch_set_scrollbar_thumb __ARGS((scrollbar_T *sb, long val, long size, long max));
 extern void gui_mch_set_font __ARGS((GuiFont font));
 extern void gui_mch_set_fg_color __ARGS((guicolor_T color));
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -61,7 +61,7 @@ extern int gui_is_win32s __ARGS((void));
 extern void gui_mch_set_parent __ARGS((char *title));
 extern void gui_mch_prepare __ARGS((int *argc, char **argv));
 extern int gui_mch_init __ARGS((void));
-extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
 extern void gui_mch_set_scrollbar_thumb __ARGS((scrollbar_T *sb, long val, long size, long max));
 extern void gui_mch_set_font __ARGS((GuiFont font));
 extern void gui_mch_set_fg_color __ARGS((guicolor_T color));
--- a/src/vim.h
+++ b/src/vim.h
@@ -1014,6 +1014,13 @@ extern char *(*dyn_libintl_textdomain)(c
 #define WSP_ABOVE	64	/* put new window above/left */
 
 /*
+ * arguments for gui_set_shellsize()
+ */
+#define RESIZE_VERT	1	/* resize vertically */
+#define RESIZE_HOR	2	/* resize horizontally */
+#define RESIZE_BOTH	15	/* resize in both directions */
+
+/*
  * "flags" values for option-setting functions.
  * When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
  * values, get local value.