Make it possible to drag a tab page label to another position. (Paul B. Mahol)
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index 4276ade..34b4243 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -46,7 +46,7 @@
OPENING A NEW TAB PAGE:
When starting Vim "vim -p filename ..." opens each file argument in a separate
-tab page (up to 'tabpagemax'). |-p|
+tab page (up to 'tabpagemax'). See |-p|
A double click with the mouse in the non-GUI tab pages line opens a new, empty
tab page. It is placed left of the position of the click. The first click
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 284968f..364ea49 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -30,6 +30,8 @@
*known-bugs*
-------------------- Known bugs and current work -----------------------
+GTK: torn-off menu doesn't work.
+
Cursor positioning wrong with 0x200e character. (John Becket, 2010 May 6)
Test 69 breaks on MS-Windows, both 32 and 64 builds. (George Reilly, 2010 Feb
@@ -1091,9 +1093,6 @@
Vim 7.3:
Patches to possibly include:
-- 9 Make it possible to drag a tab page label to another position with the
- mouse.
- Patch by Paul B. Mahol, 2008 Aug 29.
- Mac: Patch to disable antialias. (LC Mi, 2008 Aug 23) Tested on 10.5 and
10.4.
- Patch for adding "J" flag to 'cinoptions': placement of jump label. (Manuel
diff --git a/src/normal.c b/src/normal.c
index 727ecd0..5d79f35 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2281,6 +2281,9 @@
pos_T start_visual;
int moved; /* Has cursor moved? */
int in_status_line; /* mouse in status line */
+#ifdef FEAT_WINDOWS
+ static int in_tab_line = FALSE; /* mouse clicked in tab line */
+#endif
#ifdef FEAT_VERTSPLIT
int in_sep_line; /* mouse in vertical separator line */
#endif
@@ -2358,7 +2361,16 @@
if (!got_click) /* didn't get click, ignore */
return FALSE;
if (!is_drag) /* release, reset got_click */
+ {
got_click = FALSE;
+#ifdef FEAT_WINDOWS
+ if (in_tab_line)
+ {
+ in_tab_line = FALSE;
+ return FALSE;
+ }
+#endif
+ }
}
#ifndef FEAT_VISUAL
@@ -2512,8 +2524,14 @@
if (mouse_row == 0 && firstwin->w_winrow > 0)
{
if (is_drag)
+ {
+ if (in_tab_line)
+ {
+ c1 = TabPageIdxs[mouse_col];
+ tabpage_move(c1 <= 0 ? 9999 : c1 - 1);
+ }
return FALSE;
- got_click = FALSE; /* ignore mouse-up and drag events */
+ }
/* click in a tab selects that tab page */
if (is_click
@@ -2522,6 +2540,7 @@
# endif
&& mouse_col < Columns)
{
+ in_tab_line = TRUE;
c1 = TabPageIdxs[mouse_col];
if (c1 >= 0)
{
@@ -2563,6 +2582,13 @@
}
return TRUE;
}
+ else if (is_drag && in_tab_line)
+ {
+ c1 = TabPageIdxs[mouse_col];
+ tabpage_move(c1 <= 0 ? 9999 : c1 - 1);
+ return FALSE;
+ }
+
#endif
/*