summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2006-02-24 23:53:04 +0000
committerBram Moolenaar <Bram@vim.org>2006-02-24 23:53:04 +0000
commit32466aa2e9c45ab355dbaf99a9eedf334bc2e29f (patch)
tree1644d959a04f9f8c6ea5a8fe3c79f037c6915559 /src/window.c
parent2a3f7eeebfa05a33cc1d8fbba66a3dff976e8dd7 (diff)
downloadvim-32466aa2e9c45ab355dbaf99a9eedf334bc2e29f.zip
updated for version 7.0206
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c78
1 files changed, 60 insertions, 18 deletions
diff --git a/src/window.c b/src/window.c
index c116dfc84..f0a4265b0 100644
--- a/src/window.c
+++ b/src/window.c
@@ -86,7 +86,7 @@ static void win_new_height __ARGS((win_T *, int));
#ifdef FEAT_WINDOWS
static long p_ch_used = 1L; /* value of 'cmdheight' when frame
size was set */
-# define ROWS_AVAIL (Rows - p_ch - tabpageline_height())
+# define ROWS_AVAIL (Rows - p_ch - tabline_height())
#else
# define ROWS_AVAIL (Rows - p_ch)
#endif
@@ -908,7 +908,7 @@ win_split_ins(size, flags, newwin, dir)
if (flags & (WSP_TOP | WSP_BOT))
{
/* set height and row of new window to full height */
- wp->w_winrow = tabpageline_height();
+ wp->w_winrow = tabline_height();
wp->w_height = curfrp->fr_height - (p_ls > 0);
wp->w_status_height = (p_ls > 0);
}
@@ -1543,7 +1543,7 @@ win_equal(next_curwin, current, dir)
dir = 'b';
#endif
win_equal_rec(next_curwin == NULL ? curwin : next_curwin, current,
- topframe, dir, 0, tabpageline_height(),
+ topframe, dir, 0, tabline_height(),
(int)Columns, topframe->fr_height);
}
@@ -1830,7 +1830,7 @@ close_windows(buf, keep_curwin)
{
win_T *wp;
tabpage_T *tp, *nexttp;
- int h = tabpageline_height();
+ int h = tabline_height();
++RedrawingDisabled;
@@ -1866,7 +1866,7 @@ close_windows(buf, keep_curwin)
--RedrawingDisabled;
- if (h != tabpageline_height())
+ if (h != tabline_height())
shell_new_rows();
}
@@ -3041,7 +3041,7 @@ win_new_tabpage(after)
tp->tp_next = newtp;
}
win_init_size();
- firstwin->w_winrow = tabpageline_height();
+ firstwin->w_winrow = tabline_height();
newtp->tp_topframe = topframe;
last_status(FALSE);
@@ -3142,6 +3142,22 @@ find_tabpage(n)
}
/*
+ * Get index of tab page "tp". First one has index 1.
+ * When not found returns number of tab pages.
+ */
+ int
+tabpage_index(ftp)
+ tabpage_T *ftp;
+{
+ int i = 1;
+ tabpage_T *tp;
+
+ for (tp = first_tabpage; tp != NULL && tp != ftp; tp = tp->tp_next)
+ ++i;
+ return i;
+}
+
+/*
* Prepare for leaving the current tab page.
* When autocomands change "curtab" we don't leave the tab page and return
* FAIL.
@@ -3223,7 +3239,11 @@ enter_tabpage(tp, old_curbuf)
/* The tabpage line may have appeared or disappeared, may need to resize
* the frames for that. When the Vim window was resized need to update
* frame sizes too. */
- if (curtab->tp_old_Rows != Rows || old_off != firstwin->w_winrow)
+ if (curtab->tp_old_Rows != Rows || (old_off != firstwin->w_winrow
+#ifdef FEAT_GUI_TABLINE
+ && !gui_use_tabline()
+#endif
+ ))
shell_new_rows();
#ifdef FEAT_VERTSPLIT
if (curtab->tp_old_Columns != Columns && starting == 0)
@@ -3233,12 +3253,8 @@ enter_tabpage(tp, old_curbuf)
#if defined(FEAT_GUI)
/* When 'guioptions' includes 'L' or 'R' may have to remove or add
* scrollbars. Have to update them anyway. */
- if (gui.in_use)
- {
- out_flush();
- gui_init_which_components(NULL);
+ if (gui.in_use && starting == 0)
gui_update_scrollbars(TRUE);
- }
need_mouse_correct = TRUE;
#endif
@@ -3247,6 +3263,7 @@ enter_tabpage(tp, old_curbuf)
/*
* Go to tab page "n". For ":tab N" and "Ngt".
+ * When "n" is 9999 go to the last tab page.
*/
void
goto_tabpage(n)
@@ -3285,12 +3302,16 @@ goto_tabpage(n)
ttp = tp;
}
}
+ else if (n == 9999)
+ {
+ /* Go to last tab page. */
+ for (tp = first_tabpage; tp->tp_next != NULL; tp = tp->tp_next)
+ ;
+ }
else
{
/* Go to tab page "n". */
- i = 0;
- for (tp = first_tabpage; ++i != n && tp != NULL; tp = tp->tp_next)
- ;
+ tp = find_tabpage(n);
if (tp == NULL)
{
beep_flush();
@@ -3298,6 +3319,22 @@ goto_tabpage(n)
}
}
+ goto_tabpage_tp(tp);
+
+#ifdef FEAT_GUI_TABLINE
+ if (gui_use_tabline())
+ gui_mch_set_curtab(tabpage_index(tp));
+#endif
+}
+
+/*
+ * Go to tabpage "tp".
+ * Note: doesn't update the GUI tab.
+ */
+ void
+goto_tabpage_tp(tp)
+ tabpage_T *tp;
+{
if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
{
if (valid_tabpage(tp))
@@ -4071,7 +4108,7 @@ win_size_restore(gap)
int
win_comp_pos()
{
- int row = tabpageline_height();
+ int row = tabline_height();
int col = 0;
frame_comp_pos(topframe, &row, &col);
@@ -5169,8 +5206,13 @@ last_status_rec(fr, statusline)
* Return the number of lines used by the tab page line.
*/
int
-tabpageline_height()
+tabline_height()
{
+#ifdef FEAT_GUI_TABLINE
+ /* When the GUI has the tabline then this always returns zero. */
+ if (gui_use_tabline())
+ return 0;
+#endif
switch (p_stal)
{
case 0: return 0;
@@ -5516,7 +5558,7 @@ min_rows()
if (total < n)
total = n;
}
- total += tabpageline_height();
+ total += tabline_height();
#else
total = 1; /* at least one window should have a line! */
#endif