mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.0.0825: cannot drag an entry in the tabpage line
Problem: Cannot drag an entry in the tabpage line. Solution: Clear dragwin instead of got_click. (closes #11483, closes #11482)
This commit is contained in:
43
src/mouse.c
43
src/mouse.c
@@ -179,18 +179,6 @@ get_fpos_of_mouse(pos_T *mpos)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int mouse_got_click = FALSE; // got a click some time back
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reset the flag that a mouse click was seen. To be called when switching tab
|
|
||||||
* page.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
reset_mouse_got_click(void)
|
|
||||||
{
|
|
||||||
mouse_got_click = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do the appropriate action for the current mouse click in the current mode.
|
* Do the appropriate action for the current mouse click in the current mode.
|
||||||
* Not used for Command-line mode.
|
* Not used for Command-line mode.
|
||||||
@@ -236,6 +224,7 @@ do_mouse(
|
|||||||
int fixindent) // PUT_FIXINDENT if fixing indent necessary
|
int fixindent) // PUT_FIXINDENT if fixing indent necessary
|
||||||
{
|
{
|
||||||
static int do_always = FALSE; // ignore 'mouse' setting next time
|
static int do_always = FALSE; // ignore 'mouse' setting next time
|
||||||
|
static int got_click = FALSE; // got a click some time back
|
||||||
|
|
||||||
int which_button; // MOUSE_LEFT, _MIDDLE or _RIGHT
|
int which_button; // MOUSE_LEFT, _MIDDLE or _RIGHT
|
||||||
int is_click = FALSE; // If FALSE it's a drag or release event
|
int is_click = FALSE; // If FALSE it's a drag or release event
|
||||||
@@ -347,14 +336,14 @@ do_mouse(
|
|||||||
|
|
||||||
// Ignore drag and release events if we didn't get a click.
|
// Ignore drag and release events if we didn't get a click.
|
||||||
if (is_click)
|
if (is_click)
|
||||||
mouse_got_click = TRUE;
|
got_click = TRUE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!mouse_got_click) // didn't get click, ignore
|
if (!got_click) // didn't get click, ignore
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!is_drag) // release, reset mouse_got_click
|
if (!is_drag) // release, reset got_click
|
||||||
{
|
{
|
||||||
mouse_got_click = FALSE;
|
got_click = FALSE;
|
||||||
if (in_tab_line)
|
if (in_tab_line)
|
||||||
{
|
{
|
||||||
in_tab_line = FALSE;
|
in_tab_line = FALSE;
|
||||||
@@ -371,7 +360,7 @@ do_mouse(
|
|||||||
if (count > 1)
|
if (count > 1)
|
||||||
stuffnumReadbuff(count);
|
stuffnumReadbuff(count);
|
||||||
stuffcharReadbuff(Ctrl_T);
|
stuffcharReadbuff(Ctrl_T);
|
||||||
mouse_got_click = FALSE; // ignore drag&release now
|
got_click = FALSE; // ignore drag&release now
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -652,7 +641,7 @@ do_mouse(
|
|||||||
}
|
}
|
||||||
# ifdef FEAT_MENU
|
# ifdef FEAT_MENU
|
||||||
show_popupmenu();
|
show_popupmenu();
|
||||||
mouse_got_click = FALSE; // ignore release events
|
got_click = FALSE; // ignore release events
|
||||||
# endif
|
# endif
|
||||||
return (jump_flags & CURSOR_MOVED) != 0;
|
return (jump_flags & CURSOR_MOVED) != 0;
|
||||||
#else
|
#else
|
||||||
@@ -709,7 +698,7 @@ do_mouse(
|
|||||||
// next mouse click.
|
// next mouse click.
|
||||||
if (!is_drag && oap != NULL && oap->op_type != OP_NOP)
|
if (!is_drag && oap != NULL && oap->op_type != OP_NOP)
|
||||||
{
|
{
|
||||||
mouse_got_click = FALSE;
|
got_click = FALSE;
|
||||||
oap->motion_type = MCHAR;
|
oap->motion_type = MCHAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -908,7 +897,7 @@ do_mouse(
|
|||||||
do_cmdline_cmd((char_u *)".cc");
|
do_cmdline_cmd((char_u *)".cc");
|
||||||
else // location list window
|
else // location list window
|
||||||
do_cmdline_cmd((char_u *)".ll");
|
do_cmdline_cmd((char_u *)".ll");
|
||||||
mouse_got_click = FALSE; // ignore drag&release now
|
got_click = FALSE; // ignore drag&release now
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -920,7 +909,7 @@ do_mouse(
|
|||||||
if (State & MODE_INSERT)
|
if (State & MODE_INSERT)
|
||||||
stuffcharReadbuff(Ctrl_O);
|
stuffcharReadbuff(Ctrl_O);
|
||||||
stuffcharReadbuff(Ctrl_RSB);
|
stuffcharReadbuff(Ctrl_RSB);
|
||||||
mouse_got_click = FALSE; // ignore drag&release now
|
got_click = FALSE; // ignore drag&release now
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shift-Mouse click searches for the next occurrence of the word under
|
// Shift-Mouse click searches for the next occurrence of the word under
|
||||||
@@ -1513,6 +1502,17 @@ mouse_model_popup(void)
|
|||||||
return (p_mousem[0] == 'p');
|
return (p_mousem[0] == 'p');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static win_T *dragwin = NULL; // window being dragged
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset the window being dragged. To be called when switching tab page.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
reset_dragwin(void)
|
||||||
|
{
|
||||||
|
dragwin = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Move the cursor to the specified row and column on the screen.
|
* Move the cursor to the specified row and column on the screen.
|
||||||
* Change current window if necessary. Returns an integer with the
|
* Change current window if necessary. Returns an integer with the
|
||||||
@@ -1556,7 +1556,6 @@ jump_to_mouse(
|
|||||||
#endif
|
#endif
|
||||||
static int prev_row = -1;
|
static int prev_row = -1;
|
||||||
static int prev_col = -1;
|
static int prev_col = -1;
|
||||||
static win_T *dragwin = NULL; // window being dragged
|
|
||||||
static int did_drag = FALSE; // drag was noticed
|
static int did_drag = FALSE; // drag was noticed
|
||||||
|
|
||||||
win_T *wp, *old_curwin;
|
win_T *wp, *old_curwin;
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
/* mouse.c */
|
/* mouse.c */
|
||||||
void mouse_set_vert_scroll_step(long step);
|
void mouse_set_vert_scroll_step(long step);
|
||||||
void mouse_set_hor_scroll_step(long step);
|
void mouse_set_hor_scroll_step(long step);
|
||||||
void reset_mouse_got_click(void);
|
|
||||||
int do_mouse(oparg_T *oap, int c, int dir, long count, int fixindent);
|
int do_mouse(oparg_T *oap, int c, int dir, long count, int fixindent);
|
||||||
void ins_mouse(int c);
|
void ins_mouse(int c);
|
||||||
void ins_mousescroll(int dir);
|
void ins_mousescroll(int dir);
|
||||||
@@ -13,6 +12,7 @@ void del_mouse_termcode(int n);
|
|||||||
void setmouse(void);
|
void setmouse(void);
|
||||||
int mouse_has(int c);
|
int mouse_has(int c);
|
||||||
int mouse_model_popup(void);
|
int mouse_model_popup(void);
|
||||||
|
void reset_dragwin(void);
|
||||||
int jump_to_mouse(int flags, int *inclusive, int which_button);
|
int jump_to_mouse(int flags, int *inclusive, int which_button);
|
||||||
void nv_mousescroll(cmdarg_T *cap);
|
void nv_mousescroll(cmdarg_T *cap);
|
||||||
void nv_mouse(cmdarg_T *cap);
|
void nv_mouse(cmdarg_T *cap);
|
||||||
|
@@ -562,11 +562,7 @@ func Test_term_mouse_drag_window_separator()
|
|||||||
call MouseLeftClick(row, col)
|
call MouseLeftClick(row, col)
|
||||||
let row -= 1
|
let row -= 1
|
||||||
call MouseLeftDrag(row, col)
|
call MouseLeftDrag(row, col)
|
||||||
" FIXME: for unknown reason this test fails, related to calling
|
call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
|
||||||
" reset_mouse_got_click() earlier.
|
|
||||||
if ttymouse_val !=# 'xterm2'
|
|
||||||
call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
|
|
||||||
endif
|
|
||||||
let row += 1
|
let row += 1
|
||||||
call MouseLeftDrag(row, col)
|
call MouseLeftDrag(row, col)
|
||||||
call assert_equal(rowseparator, winheight(0) + 1, msg)
|
call assert_equal(rowseparator, winheight(0) + 1, msg)
|
||||||
@@ -779,6 +775,28 @@ func Test_term_mouse_drag_to_move_tab()
|
|||||||
\ 'Tab page 2',
|
\ 'Tab page 2',
|
||||||
\ ' Xtab1'], a, msg)
|
\ ' Xtab1'], a, msg)
|
||||||
|
|
||||||
|
" Switch to tab1
|
||||||
|
tabnext
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ ' Xtab2',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab1'], a, msg)
|
||||||
|
|
||||||
|
" Click in tab2 and drag it to tab1.
|
||||||
|
" This time it is non-current tab.
|
||||||
|
call MouseLeftClick(row, 6)
|
||||||
|
call assert_equal(0, getcharmod(), msg)
|
||||||
|
for col in [7, 8, 9, 10]
|
||||||
|
call MouseLeftDrag(row, col)
|
||||||
|
endfor
|
||||||
|
call MouseLeftRelease(row, col)
|
||||||
|
let a = split(execute(':tabs'), "\n")
|
||||||
|
call assert_equal(['Tab page 1',
|
||||||
|
\ ' Xtab1',
|
||||||
|
\ 'Tab page 2',
|
||||||
|
\ '> Xtab2'], a, msg)
|
||||||
|
|
||||||
" Click elsewhere so that click in next iteration is not
|
" Click elsewhere so that click in next iteration is not
|
||||||
" interpreted as unwanted double-click.
|
" interpreted as unwanted double-click.
|
||||||
call MouseLeftClick(row, 11)
|
call MouseLeftClick(row, 11)
|
||||||
|
@@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
825,
|
||||||
/**/
|
/**/
|
||||||
824,
|
824,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -4269,7 +4269,7 @@ leave_tabpage(
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_mouse_got_click();
|
reset_dragwin();
|
||||||
#if defined(FEAT_GUI)
|
#if defined(FEAT_GUI)
|
||||||
// Remove the scrollbars. They may be added back later.
|
// Remove the scrollbars. They may be added back later.
|
||||||
if (gui.in_use)
|
if (gui.in_use)
|
||||||
@@ -4338,7 +4338,7 @@ enter_tabpage(
|
|||||||
|
|
||||||
// If there was a click in a window, it won't be usable for a following
|
// If there was a click in a window, it won't be usable for a following
|
||||||
// drag.
|
// drag.
|
||||||
reset_mouse_got_click();
|
reset_dragwin();
|
||||||
|
|
||||||
// The tabpage line may have appeared or disappeared, may need to resize
|
// 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
|
// the frames for that. When the Vim window was resized need to update
|
||||||
|
Reference in New Issue
Block a user