Problem: Cannot drag an entry in the tabpage line.
Solution: Clear dragwin instead of got_click. (closes #11483,
closes #11482)
}
#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.
* Not used for Command-line mode.
int fixindent) // PUT_FIXINDENT if fixing indent necessary
{
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 is_click = FALSE; // If FALSE it's a drag or release event
// Ignore drag and release events if we didn't get a click.
if (is_click)
- mouse_got_click = TRUE;
+ got_click = TRUE;
else
{
- if (!mouse_got_click) // didn't get click, ignore
+ if (!got_click) // didn't get click, ignore
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)
{
in_tab_line = FALSE;
if (count > 1)
stuffnumReadbuff(count);
stuffcharReadbuff(Ctrl_T);
- mouse_got_click = FALSE; // ignore drag&release now
+ got_click = FALSE; // ignore drag&release now
return FALSE;
}
}
# ifdef FEAT_MENU
show_popupmenu();
- mouse_got_click = FALSE; // ignore release events
+ got_click = FALSE; // ignore release events
# endif
return (jump_flags & CURSOR_MOVED) != 0;
#else
// next mouse click.
if (!is_drag && oap != NULL && oap->op_type != OP_NOP)
{
- mouse_got_click = FALSE;
+ got_click = FALSE;
oap->motion_type = MCHAR;
}
do_cmdline_cmd((char_u *)".cc");
else // location list window
do_cmdline_cmd((char_u *)".ll");
- mouse_got_click = FALSE; // ignore drag&release now
+ got_click = FALSE; // ignore drag&release now
}
#endif
if (State & MODE_INSERT)
stuffcharReadbuff(Ctrl_O);
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
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.
* Change current window if necessary. Returns an integer with the
#endif
static int prev_row = -1;
static int prev_col = -1;
- static win_T *dragwin = NULL; // window being dragged
static int did_drag = FALSE; // drag was noticed
win_T *wp, *old_curwin;
/* mouse.c */
void mouse_set_vert_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);
void ins_mouse(int c);
void ins_mousescroll(int dir);
void setmouse(void);
int mouse_has(int c);
int mouse_model_popup(void);
+void reset_dragwin(void);
int jump_to_mouse(int flags, int *inclusive, int which_button);
void nv_mousescroll(cmdarg_T *cap);
void nv_mouse(cmdarg_T *cap);
call MouseLeftClick(row, col)
let row -= 1
call MouseLeftDrag(row, col)
- " FIXME: for unknown reason this test fails, related to calling
- " reset_mouse_got_click() earlier.
- if ttymouse_val !=# 'xterm2'
- call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
- endif
+ call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
let row += 1
call MouseLeftDrag(row, col)
call assert_equal(rowseparator, winheight(0) + 1, msg)
\ 'Tab page 2',
\ ' 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
" interpreted as unwanted double-click.
call MouseLeftClick(row, 11)
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 825,
/**/
824,
/**/
return FAIL;
}
- reset_mouse_got_click();
+ reset_dragwin();
#if defined(FEAT_GUI)
// Remove the scrollbars. They may be added back later.
if (gui.in_use)
// If there was a click in a window, it won't be usable for a following
// drag.
- reset_mouse_got_click();
+ reset_dragwin();
// 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