# HG changeset patch # User Bram Moolenaar # Date 1652711403 -7200 # Node ID 947b7d061b079fa76b5d56a0683525f569a0eeba # Parent 92795eafa0d62468f254cacd9a60cf4f99b4eb21 patch 8.2.4965: GUI: testing mouse move event depends on screen cell size Commit: https://github.com/vim/vim/commit/7add8d373185a6b20aeeb8c30adb9acc68de66ec Author: Bram Moolenaar Date: Mon May 16 15:27:46 2022 +0100 patch 8.2.4965: GUI: testing mouse move event depends on screen cell size Problem: GUI: testing mouse move event depends on screen cell size. Solution: Multiply the row and column with the screen cell size. diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt --- a/runtime/doc/testing.txt +++ b/runtime/doc/testing.txt @@ -154,9 +154,12 @@ test_gui_event({event}, {args}) move: Optional; if used and TRUE then a mouse move event can be generated. Only {args} row: and col: are used and - required; they are interpreted as pixels. + required; they are interpreted as pixels or + screen cells, depending on "cell". Only results in an event when 'mousemoveevent' is set or a popup uses mouse move events. + cell: Optional: when present and TRUE then "move" + uses screen cells instead of pixel positions "scrollbar": Set or drag the left, right or horizontal scrollbar. Only diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim --- a/src/testdir/test_gui.vim +++ b/src/testdir/test_gui.vim @@ -1209,66 +1209,71 @@ func PrepareForMouseEvent(args) endif endfunc +func MouseWasMoved() + let pos = getmousepos() + call add(g:eventlist, #{row: pos.screenrow, col: pos.screencol}) +endfunc + func Test_gui_mouse_move_event() let args = #{move: 1, button: 0, multiclick: 0, modifiers: 0} - " default, do not generate mouse move events + " by default, does not generate mouse move events set mousemev& call assert_false(&mousemev) - let g:n_event = 0 - nnoremap :let g:n_event += 1 + let g:eventlist = [] + nnoremap :call MouseWasMoved() " start at mouse pos (1,1), clear counter call PrepareForMouseEvent(args) - let g:n_event = 0 + let g:eventlist = [] - call extend(args, #{row: 30, col: 300}) + call extend(args, #{row: 3, col: 30, cell: v:true}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') - call extend(args, #{row: 100, col: 300}) + call extend(args, #{row: 10, col: 30, cell: v:true}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') " no events since mousemev off - call assert_equal(0, g:n_event) + call assert_equal([], g:eventlist) " turn on mouse events and try the same thing set mousemev call PrepareForMouseEvent(args) - let g:n_event = 0 + let g:eventlist = [] - call extend(args, #{row: 30, col: 300}) + call extend(args, #{row: 3, col: 30, cell: v:true}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') - call extend(args, #{row: 100, col: 300}) + call extend(args, #{row: 10, col: 30, cell: v:true}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') - call assert_equal(2, g:n_event) + call assert_equal([#{row: 4, col: 31}, #{row: 11, col: 31}], g:eventlist) - " wiggle the mouse around, shouldn't get events + " wiggle the mouse around within a screen cell, shouldn't trigger events + call extend(args, #{cell: v:false}) call PrepareForMouseEvent(args) - let g:n_event = 0 + let g:eventlist = [] - call extend(args, #{row: 1, col: 2}) + call extend(args, #{row: 1, col: 2, cell: v:false}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') - call extend(args, #{row: 2, col: 2}) + call extend(args, #{row: 2, col: 2, cell: v:false}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') - call extend(args, #{row: 2, col: 1}) + call extend(args, #{row: 2, col: 1, cell: v:false}) call test_gui_event('mouse', args) call feedkeys('', 'Lx!') - call PrepareForMouseEvent(args) - call assert_equal(0, g:n_event) + call assert_equal([], g:eventlist) - unlet g:n_event + unlet g:eventlist unmap set mousemev& endfunc diff --git a/src/testing.c b/src/testing.c --- a/src/testing.c +++ b/src/testing.c @@ -1386,7 +1386,15 @@ test_gui_mouse_event(dict_T *args) col = (int)dict_get_number(args, (char_u *)"col"); if (move) + { + if (dict_get_bool(args, (char_u *)"cell", FALSE)) + { + // click in the middle of the character cell + row = row * gui.char_height + gui.char_height / 2; + col = col * gui.char_width + gui.char_width / 2; + } gui_mouse_moved(col, row); + } else { button = (int)dict_get_number(args, (char_u *)"button"); diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 4965, +/**/ 4964, /**/ 4963,