diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-10-04 21:45:33 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-10-04 21:45:33 +0200 |
commit | 8e5f26ec6a1446aabffa7a0a7819a7462372a5b8 (patch) | |
tree | 263693efac261c5910049981776d0ed7d3c71878 | |
parent | 4dbb2669e9ed9ec6864705dcb569715e417e1303 (diff) |
patch 9.0.1983: scrolling inactive window not possible with cursorbindv9.0.1983
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>
-rw-r--r-- | src/move.c | 8 | ||||
-rw-r--r-- | src/testdir/test_scroll_opt.vim | 84 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 79 insertions, 15 deletions
diff --git a/src/move.c b/src/move.c index e5309df486..46e4f358dc 100644 --- a/src/move.c +++ b/src/move.c @@ -3571,6 +3571,14 @@ halfpage(int flag, linenr_T Prenum) 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; colnr_T col = curwin->w_cursor.col; colnr_T coladd = curwin->w_cursor.coladd; diff --git a/src/testdir/test_scroll_opt.vim b/src/testdir/test_scroll_opt.vim index 81670cdd7a..005e45bb59 100644 --- a/src/testdir/test_scroll_opt.vim +++ b/src/testdir/test_scroll_opt.vim @@ -1,4 +1,4 @@ -" Test for reset 'scroll' and 'smoothscroll' +" Test for 'scroll', 'scrolloff', 'smoothscroll', etc. source check.vim source screendump.vim @@ -39,20 +39,74 @@ func Test_reset_scroll() endfunc func Test_scolloff_even_line_count() - new - resize 6 - setlocal scrolloff=3 - call setline(1, range(20)) - normal 2j - call assert_equal(1, getwininfo(win_getid())[0].topline) - normal j - call assert_equal(1, getwininfo(win_getid())[0].topline) - normal j - call assert_equal(2, getwininfo(win_getid())[0].topline) - normal j - call assert_equal(3, getwininfo(win_getid())[0].topline) - - bwipe! + new + resize 6 + setlocal scrolloff=3 + call setline(1, range(20)) + normal 2j + call assert_equal(1, getwininfo(win_getid())[0].topline) + normal j + call assert_equal(1, getwininfo(win_getid())[0].topline) + normal j + call assert_equal(2, getwininfo(win_getid())[0].topline) + normal j + call assert_equal(3, getwininfo(win_getid())[0].topline) + + bwipe! +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() diff --git a/src/version.c b/src/version.c index 7fdb1e621d..32005545f3 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1983, +/**/ 1982, /**/ 1981, |