mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.4902: mouse wheel scrolling is inconsistent
Problem: Mouse wheel scrolling is inconsistent. Solution: Use the MS-Winows system setting. (closes #10368)
This commit is contained in:
56
src/mouse.c
56
src/mouse.c
@@ -13,6 +13,25 @@
|
||||
|
||||
#include "vim.h"
|
||||
|
||||
/*
|
||||
* Horiziontal and vertical steps used when scrolling.
|
||||
* When negative scroll by a whole page.
|
||||
*/
|
||||
static long mouse_hor_step = 6;
|
||||
static long mouse_vert_step = 3;
|
||||
|
||||
void
|
||||
mouse_set_vert_scroll_step(long step)
|
||||
{
|
||||
mouse_vert_step = step;
|
||||
}
|
||||
|
||||
void
|
||||
mouse_set_hor_scroll_step(long step)
|
||||
{
|
||||
mouse_hor_step = step;
|
||||
}
|
||||
|
||||
#ifdef CHECK_DOUBLE_CLICK
|
||||
/*
|
||||
* Return the duration from t1 to t2 in milliseconds.
|
||||
@@ -1101,13 +1120,16 @@ ins_mousescroll(int dir)
|
||||
// Don't scroll the window in which completion is being done.
|
||||
if (!pum_visible() || curwin != old_curwin)
|
||||
{
|
||||
long step;
|
||||
|
||||
if (dir == MSCR_DOWN || dir == MSCR_UP)
|
||||
{
|
||||
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
scroll_redraw(dir,
|
||||
(long)(curwin->w_botline - curwin->w_topline));
|
||||
if (mouse_vert_step < 0
|
||||
|| mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
step = (long)(curwin->w_botline - curwin->w_topline);
|
||||
else
|
||||
scroll_redraw(dir, 3L);
|
||||
step = mouse_vert_step;
|
||||
scroll_redraw(dir, step);
|
||||
# ifdef FEAT_PROP_POPUP
|
||||
if (WIN_IS_POPUP(curwin))
|
||||
popup_set_firstline(curwin);
|
||||
@@ -1116,10 +1138,13 @@ ins_mousescroll(int dir)
|
||||
#ifdef FEAT_GUI
|
||||
else
|
||||
{
|
||||
int val, step = 6;
|
||||
int val;
|
||||
|
||||
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
if (mouse_hor_step < 0
|
||||
|| mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
step = curwin->w_width;
|
||||
else
|
||||
step = mouse_hor_step;
|
||||
val = curwin->w_leftcol + (dir == MSCR_RIGHT ? -step : step);
|
||||
if (val < 0)
|
||||
val = 0;
|
||||
@@ -2005,8 +2030,9 @@ retnomove:
|
||||
}
|
||||
|
||||
/*
|
||||
* Mouse scroll wheel: Default action is to scroll three lines, or one page
|
||||
* when Shift or Ctrl is used.
|
||||
* Mouse scroll wheel: Default action is to scroll mouse_vert_step lines (or
|
||||
* mouse_hor_step, depending on the scroll direction), or one page when Shift or
|
||||
* Ctrl is used.
|
||||
* K_MOUSEUP (cap->arg == 1) or K_MOUSEDOWN (cap->arg == 0) or
|
||||
* K_MOUSELEFT (cap->arg == -1) or K_MOUSERIGHT (cap->arg == -2)
|
||||
*/
|
||||
@@ -2033,7 +2059,6 @@ nv_mousescroll(cmdarg_T *cap)
|
||||
curwin = wp;
|
||||
curbuf = curwin->w_buffer;
|
||||
}
|
||||
|
||||
if (cap->arg == MSCR_UP || cap->arg == MSCR_DOWN)
|
||||
{
|
||||
# ifdef FEAT_TERMINAL
|
||||
@@ -2043,21 +2068,21 @@ nv_mousescroll(cmdarg_T *cap)
|
||||
send_keys_to_term(curbuf->b_term, cap->cmdchar, mod_mask, FALSE);
|
||||
else
|
||||
# endif
|
||||
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
if (mouse_vert_step < 0 || mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
{
|
||||
(void)onepage(cap->arg ? FORWARD : BACKWARD, 1L);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Don't scroll more than half the window height.
|
||||
if (curwin->w_height < 6)
|
||||
if (curwin->w_height < mouse_vert_step * 2)
|
||||
{
|
||||
cap->count1 = curwin->w_height / 2;
|
||||
if (cap->count1 == 0)
|
||||
cap->count1 = 1;
|
||||
}
|
||||
else
|
||||
cap->count1 = 3;
|
||||
cap->count1 = mouse_vert_step;
|
||||
cap->count0 = cap->count1;
|
||||
nv_scroll_line(cap);
|
||||
}
|
||||
@@ -2072,10 +2097,13 @@ nv_mousescroll(cmdarg_T *cap)
|
||||
// Horizontal scroll - only allowed when 'wrap' is disabled
|
||||
if (!curwin->w_p_wrap)
|
||||
{
|
||||
int val, step = 6;
|
||||
int val, step;
|
||||
|
||||
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
if (mouse_hor_step < 0
|
||||
|| mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||
step = curwin->w_width;
|
||||
else
|
||||
step = mouse_hor_step;
|
||||
val = curwin->w_leftcol + (cap->arg == MSCR_RIGHT ? -step : +step);
|
||||
if (val < 0)
|
||||
val = 0;
|
||||
|
Reference in New Issue
Block a user