mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
updated for version 7.3.862
Problem: Dragging the status line can be slow. Solution: Look ahead and drop the drag event if there is a next one.
This commit is contained in:
22
src/eval.c
22
src/eval.c
@@ -11238,27 +11238,7 @@ f_getchar(argvars, rettv)
|
||||
rettv->vval.v_string = vim_strsave(temp);
|
||||
|
||||
#ifdef FEAT_MOUSE
|
||||
if (n == K_LEFTMOUSE
|
||||
|| n == K_LEFTMOUSE_NM
|
||||
|| n == K_LEFTDRAG
|
||||
|| n == K_LEFTRELEASE
|
||||
|| n == K_LEFTRELEASE_NM
|
||||
|| n == K_MIDDLEMOUSE
|
||||
|| n == K_MIDDLEDRAG
|
||||
|| n == K_MIDDLERELEASE
|
||||
|| n == K_RIGHTMOUSE
|
||||
|| n == K_RIGHTDRAG
|
||||
|| n == K_RIGHTRELEASE
|
||||
|| n == K_X1MOUSE
|
||||
|| n == K_X1DRAG
|
||||
|| n == K_X1RELEASE
|
||||
|| n == K_X2MOUSE
|
||||
|| n == K_X2DRAG
|
||||
|| n == K_X2RELEASE
|
||||
|| n == K_MOUSELEFT
|
||||
|| n == K_MOUSERIGHT
|
||||
|| n == K_MOUSEDOWN
|
||||
|| n == K_MOUSEUP)
|
||||
if (is_mouse_key(n))
|
||||
{
|
||||
int row = mouse_row;
|
||||
int col = mouse_col;
|
||||
|
57
src/misc1.c
57
src/misc1.c
@@ -3288,6 +3288,38 @@ ask_yesno(str, direct)
|
||||
return r;
|
||||
}
|
||||
|
||||
#if defined(FEAT_MOUSE) || defined(PROTO)
|
||||
/*
|
||||
* Return TRUE if "c" is a mouse key.
|
||||
*/
|
||||
int
|
||||
is_mouse_key(c)
|
||||
int c;
|
||||
{
|
||||
return c == K_LEFTMOUSE
|
||||
|| c == K_LEFTMOUSE_NM
|
||||
|| c == K_LEFTDRAG
|
||||
|| c == K_LEFTRELEASE
|
||||
|| c == K_LEFTRELEASE_NM
|
||||
|| c == K_MIDDLEMOUSE
|
||||
|| c == K_MIDDLEDRAG
|
||||
|| c == K_MIDDLERELEASE
|
||||
|| c == K_RIGHTMOUSE
|
||||
|| c == K_RIGHTDRAG
|
||||
|| c == K_RIGHTRELEASE
|
||||
|| c == K_MOUSEDOWN
|
||||
|| c == K_MOUSEUP
|
||||
|| c == K_MOUSELEFT
|
||||
|| c == K_MOUSERIGHT
|
||||
|| c == K_X1MOUSE
|
||||
|| c == K_X1DRAG
|
||||
|| c == K_X1RELEASE
|
||||
|| c == K_X2MOUSE
|
||||
|| c == K_X2DRAG
|
||||
|| c == K_X2RELEASE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Get a key stroke directly from the user.
|
||||
* Ignores mouse clicks and scrollbar events, except a click for the left
|
||||
@@ -3373,31 +3405,10 @@ get_keystroke()
|
||||
n = TO_SPECIAL(buf[1], buf[2]);
|
||||
if (buf[1] == KS_MODIFIER
|
||||
|| n == K_IGNORE
|
||||
#ifdef FEAT_MOUSE
|
||||
|| n == K_LEFTMOUSE_NM
|
||||
|| n == K_LEFTDRAG
|
||||
|| n == K_LEFTRELEASE
|
||||
|| n == K_LEFTRELEASE_NM
|
||||
|| n == K_MIDDLEMOUSE
|
||||
|| n == K_MIDDLEDRAG
|
||||
|| n == K_MIDDLERELEASE
|
||||
|| n == K_RIGHTMOUSE
|
||||
|| n == K_RIGHTDRAG
|
||||
|| n == K_RIGHTRELEASE
|
||||
|| n == K_MOUSEDOWN
|
||||
|| n == K_MOUSEUP
|
||||
|| n == K_MOUSELEFT
|
||||
|| n == K_MOUSERIGHT
|
||||
|| n == K_X1MOUSE
|
||||
|| n == K_X1DRAG
|
||||
|| n == K_X1RELEASE
|
||||
|| n == K_X2MOUSE
|
||||
|| n == K_X2DRAG
|
||||
|| n == K_X2RELEASE
|
||||
# ifdef FEAT_GUI
|
||||
|| (is_mouse_key(n) && n != K_LEFTMOUSE)
|
||||
#ifdef FEAT_GUI
|
||||
|| n == K_VER_SCROLLBAR
|
||||
|| n == K_HOR_SCROLLBAR
|
||||
# endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
|
26
src/normal.c
26
src/normal.c
@@ -2443,7 +2443,31 @@ do_mouse(oap, c, dir, count, fixindent)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
|
||||
for (;;)
|
||||
{
|
||||
which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
|
||||
if (is_drag)
|
||||
{
|
||||
/* If the next character is the same mouse event then use that
|
||||
* one. Speeds up dragging the status line. */
|
||||
if (vpeekc() != NUL)
|
||||
{
|
||||
int nc;
|
||||
int save_mouse_row = mouse_row;
|
||||
int save_mouse_col = mouse_col;
|
||||
|
||||
/* Need to get the character, peeking doesn't get the actual
|
||||
* one. */
|
||||
nc = safe_vgetc();
|
||||
if (c == nc)
|
||||
continue;
|
||||
vungetc(nc);
|
||||
mouse_row = save_mouse_row;
|
||||
mouse_col = save_mouse_col;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef FEAT_MOUSESHAPE
|
||||
/* May have stopped dragging the status or separator line. The pointer is
|
||||
|
@@ -42,6 +42,7 @@ void unchanged __ARGS((buf_T *buf, int ff));
|
||||
void check_status __ARGS((buf_T *buf));
|
||||
void change_warning __ARGS((int col));
|
||||
int ask_yesno __ARGS((char_u *str, int direct));
|
||||
int is_mouse_key __ARGS((int c));
|
||||
int get_keystroke __ARGS((void));
|
||||
int get_number __ARGS((int colon, int *mouse_used));
|
||||
int prompt_for_number __ARGS((int *mouse_used));
|
||||
|
@@ -728,6 +728,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
862,
|
||||
/**/
|
||||
861,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user