0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 9.0.1983: scrolling inactive window not possible with cursorbind

Problem:  Scrolling non-current window using mouse is inconsistent
          depending on 'scrollbind'/'scrolloff' and different from GUI
          vertical scrollbar when 'cursorbind' is set.
Solution: Don't move cursor in non-current windows for 'cursorbind' if
          cursor in the current window didn't move.

closes: #13219
closes: #13210

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
zeertzjq
2023-10-04 21:45:33 +02:00
committed by Christian Brabandt
parent 4dbb2669e9
commit 8e5f26ec6a
3 changed files with 78 additions and 14 deletions

View File

@@ -3571,6 +3571,14 @@ halfpage(int flag, linenr_T Prenum)
void void
do_check_cursorbind(void) do_check_cursorbind(void)
{ {
static win_T *prev_curwin = NULL;
static pos_T prev_cursor = {0, 0, 0};
if (curwin == prev_curwin && EQUAL_POS(curwin->w_cursor, prev_cursor))
return;
prev_curwin = curwin;
prev_cursor = curwin->w_cursor;
linenr_T line = curwin->w_cursor.lnum; linenr_T line = curwin->w_cursor.lnum;
colnr_T col = curwin->w_cursor.col; colnr_T col = curwin->w_cursor.col;
colnr_T coladd = curwin->w_cursor.coladd; colnr_T coladd = curwin->w_cursor.coladd;

View File

@@ -1,4 +1,4 @@
" Test for reset 'scroll' and 'smoothscroll' " Test for 'scroll', 'scrolloff', 'smoothscroll', etc.
source check.vim source check.vim
source screendump.vim source screendump.vim
@@ -55,6 +55,60 @@ func Test_scolloff_even_line_count()
bwipe! bwipe!
endfunc endfunc
func Test_mouse_scroll_inactive_with_cursorbind()
for scb in [0, 1]
for so in [0, 1, 2]
let msg = $'scb={scb} so={so}'
new | only
let w1 = win_getid()
setlocal cursorbind
let &l:scb = scb
let &l:so = so
call setline(1, range(101, 109))
rightbelow vnew
let w2 = win_getid()
setlocal cursorbind
let &l:scb = scb
let &l:so = so
call setline(1, range(101, 109))
normal! $
call assert_equal(3, col('.', w1), msg)
call assert_equal(3, col('.', w2), msg)
call test_setmouse(1, 1)
call feedkeys("\<ScrollWheelDown>", 'xt')
call assert_equal(4, line('w0', w1), msg)
call assert_equal(4 + so, line('.', w1), msg)
call assert_equal(1, line('w0', w2), msg)
call assert_equal(1, line('.', w2), msg)
call feedkeys("\<ScrollWheelDown>", 'xt')
call assert_equal(7, line('w0', w1), msg)
call assert_equal(7 + so, line('.', w1), msg)
call assert_equal(1, line('w0', w2), msg)
call assert_equal(1, line('.', w2), msg)
call feedkeys("\<ScrollWheelUp>", 'xt')
call assert_equal(4, line('w0', w1), msg)
call assert_equal(7 + so, line('.', w1), msg)
call assert_equal(1, line('w0', w2), msg)
call assert_equal(1, line('.', w2), msg)
call feedkeys("\<ScrollWheelUp>", 'xt')
call assert_equal(1, line('w0', w1), msg)
call assert_equal(7 + so, line('.', w1), msg)
call assert_equal(1, line('w0', w2), msg)
call assert_equal(1, line('.', w2), msg)
normal! 0
call assert_equal(1, line('.', w1), msg)
call assert_equal(1, col('.', w1), msg)
call assert_equal(1, line('.', w2), msg)
call assert_equal(1, col('.', w2), msg)
bwipe!
bwipe!
endfor
endfor
endfunc
func Test_CtrlE_CtrlY_stop_at_end() func Test_CtrlE_CtrlY_stop_at_end()
enew enew
call setline(1, ['one', 'two']) call setline(1, ['one', 'two'])

View File

@@ -704,6 +704,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 */
/**/
1983,
/**/ /**/
1982, 1982,
/**/ /**/