diff src/gui.c @ 687:d4b8e06e7c96

updated for version 7.0207
author vimboss
date Sat, 25 Feb 2006 21:47:41 +0000
parents d7e33248b9c8
children 8106f3da02d0
line wrap: on
line diff
--- a/src/gui.c
+++ b/src/gui.c
@@ -3199,7 +3199,8 @@ gui_init_which_components(oldval)
 	fix_size = FALSE;
 
 #ifdef FEAT_GUI_TABLINE
-	/* Update the tab line, it may appear or disappear. */
+	/* Update the GUI tab line, it may appear or disappear.  This may
+	 * cause the non-GUI tab line to disappear or appear. */
 	using_tabline = gui_has_tabline();
 	if (prev_has_tabline != using_tabline)
 	{
@@ -3279,7 +3280,6 @@ gui_init_which_components(oldval)
 	if (need_set_size)
 	{
 #ifdef FEAT_GUI_GTK
-	    long    r = Rows;
 	    long    c = Columns;
 #endif
 	    /* Adjust the size of the window to make the text area keep the
@@ -3295,13 +3295,20 @@ gui_init_which_components(oldval)
 	     * character here to avoid this effect.
 	     * If you remove this, please test this command for resizing
 	     * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q".
-	     * Don't do this while starting up though. */
+	     * Don't do this while starting up though.
+	     * And don't change Rows, it may have be reduced intentionally
+	     * when adding menu/toolbar/tabline. */
 	    if (!gui.starting)
 		(void)char_avail();
-	    Rows = r;
 	    Columns = c;
 #endif
 	}
+#ifdef FEAT_WINDOWS
+	/* When the console tabline appears or disappears the window positions
+	 * change. */
+	if (firstwin->w_winrow != tabline_height())
+	    shell_new_rows();	/* recompute window positions and heights */
+#endif
     }
 }
 
@@ -3359,24 +3366,57 @@ get_tabline_label(tp)
     int		wincount;
     win_T	*wp;
 
-    /* Get the buffer name into NameBuff[] */
-    get_trans_bufname(tp == curtab ? curbuf : tp->tp_curwin->w_buffer);
-
-    wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
-    for (wincount = 0; wp != NULL; wp = wp->w_next, ++wincount)
-	if (bufIsChanged(wp->w_buffer))
-	    modified = TRUE;
-    if (modified || wincount > 1)
+    /* Use 'guitablabel' if it's set. */
+    if (*p_gtl != NUL)
     {
-	if (wincount > 1)
-	    vim_snprintf((char *)buf, sizeof(buf), "%d", wincount);
-	else
-	    buf[0] = NUL;
-	if (modified)
-	    STRCAT(buf, "+");
-	STRCAT(buf, " ");
-	mch_memmove(NameBuff + STRLEN(buf), NameBuff, STRLEN(NameBuff) + 1);
-	mch_memmove(NameBuff, buf, STRLEN(buf));
+	int	use_sandbox = FALSE;
+	int	save_called_emsg = called_emsg;
+	char_u	res[MAXPATHL];
+
+	called_emsg = FALSE;
+
+	printer_page_num = tabpage_index(tp);
+# ifdef FEAT_EVAL
+	set_vim_var_nr(VV_LNUM, printer_page_num);
+	use_sandbox = was_set_insecurely((char_u *)"guitablabel", 0);
+# endif
+	/* Can't use NameBuff directly, build_stl_str_hl() uses it. */
+	build_stl_str_hl(tp == curtab ? curwin : tp->tp_curwin,
+		res, MAXPATHL, p_gtl, use_sandbox,
+		0, (int)Columns, NULL, NULL);
+	STRCPY(NameBuff, res);
+
+	if (called_emsg)
+	{
+	    set_string_option_direct((char_u *)"guitablabel", -1,
+						      (char_u *)"", OPT_FREE);
+# ifdef FEAT_EVAL
+	    set_option_scriptID((char_u *)"guitablabel", SID_ERROR);
+# endif
+	}
+	called_emsg |= save_called_emsg;
+    }
+    else
+    {
+	/* Get the buffer name into NameBuff[] */
+	get_trans_bufname(tp == curtab ? curbuf : tp->tp_curwin->w_buffer);
+
+	wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
+	for (wincount = 0; wp != NULL; wp = wp->w_next, ++wincount)
+	    if (bufIsChanged(wp->w_buffer))
+		modified = TRUE;
+	if (modified || wincount > 1)
+	{
+	    if (wincount > 1)
+		vim_snprintf((char *)buf, sizeof(buf), "%d", wincount);
+	    else
+		buf[0] = NUL;
+	    if (modified)
+		STRCAT(buf, "+");
+	    STRCAT(buf, " ");
+	    mch_memmove(NameBuff + STRLEN(buf), NameBuff, STRLEN(NameBuff) + 1);
+	    mch_memmove(NameBuff, buf, STRLEN(buf));
+	}
     }
 }