changeset 28558:2edad5db074c v8.2.4803

patch 8.2.4803: WinScrolled not always triggered when scrolling with mouse Commit: https://github.com/vim/vim/commit/66e13aedc7986c83644d537a8fdd3cb006507678 Author: LemonBoy <thatlemon@gmail.com> Date: Thu Apr 21 22:52:11 2022 +0100 patch 8.2.4803: WinScrolled not always triggered when scrolling with mouse Problem: WinScrolled not always triggered when scrolling with the mouse. Solution: Add calls to may_trigger_winscrolled(). (closes https://github.com/vim/vim/issues/10246)
author Bram Moolenaar <Bram@vim.org>
date Fri, 22 Apr 2022 00:00:04 +0200
parents e5203e5669c9
children a9388feb437d
files src/mouse.c src/testdir/test_autocmd.vim src/version.c
diffstat 3 files changed, 36 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -1127,6 +1127,7 @@ ins_mousescroll(int dir)
 	}
 #endif
 	did_scroll = TRUE;
+	may_trigger_winscrolled();
     }
 
     curwin->w_redr_status = TRUE;
@@ -2087,6 +2088,7 @@ nv_mousescroll(cmdarg_T *cap)
     if (curwin != old_curwin && curwin->w_p_cul)
 	redraw_for_cursorline(curwin);
 # endif
+    may_trigger_winscrolled();
 
     curwin->w_redr_status = TRUE;
 
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -364,6 +364,37 @@ func Test_WinScrolled()
   call delete('Xtest_winscrolled')
 endfunc
 
+func Test_WinScrolled_mouse()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+    set nowrap scrolloff=0
+    set mouse=a term=xterm ttymouse=sgr mousetime=200 clipboard=
+    call setline(1, ['foo']->repeat(32))
+    split
+    let g:scrolled = 0
+    au WinScrolled * let g:scrolled += 1
+  END
+  call writefile(lines, 'Xtest_winscrolled_mouse')
+  let buf = RunVimInTerminal('-S Xtest_winscrolled_mouse', {'rows': 10})
+
+  " With the upper split focused, send a scroll-down event to the unfocused one.
+  call test_setmouse(7, 1)
+  call term_sendkeys(buf, "\<ScrollWheelDown>")
+  call TermWait(buf)
+  call term_sendkeys(buf, ":echo g:scrolled\<CR>")
+  call WaitForAssert({-> assert_match('^1', term_getline(buf, 10))}, 1000)
+
+  " Again, but this time while we're in insert mode.
+  call term_sendkeys(buf, "i\<ScrollWheelDown>\<Esc>")
+  call TermWait(buf)
+  call term_sendkeys(buf, ":echo g:scrolled\<CR>")
+  call WaitForAssert({-> assert_match('^2', term_getline(buf, 10))}, 1000)
+
+  call StopVimInTerminal(buf)
+  call delete('Xtest_winscrolled_mouse')
+endfunc
+
 func Test_WinScrolled_close_curwin()
   CheckRunVimInTerminal
 
@@ -1572,7 +1603,7 @@ func Test_QuitPre()
   " Close the other window, <afile> should be correct.
   exe win_id2win(winid) . 'q'
   call assert_equal('Xfoo', g:afile)
- 
+
   unlet g:afile
   bwipe Xfoo
   bwipe Xbar
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4803,
+/**/
     4802,
 /**/
     4801,