summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-05-16 15:27:46 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-16 15:27:46 +0100
commit7add8d373185a6b20aeeb8c30adb9acc68de66ec (patch)
tree0c334ef25ebe071a145db46d90b83485abba636d
parent3b675c276c71472022b684b7b1dec213824d3104 (diff)
patch 8.2.4965: GUI: testing mouse move event depends on screen cell sizev8.2.4965
Problem: GUI: testing mouse move event depends on screen cell size. Solution: Multiply the row and column with the screen cell size.
-rw-r--r--runtime/doc/testing.txt5
-rw-r--r--src/testdir/test_gui.vim43
-rw-r--r--src/testing.c8
-rw-r--r--src/version.c2
4 files changed, 38 insertions, 20 deletions
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index f2f04a2aec..0601cb9c80 100644
--- 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
index d0600c931e..b390d14bc5 100644
--- 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 <special> <MouseMove> :let g:n_event += 1<CR>
+ let g:eventlist = []
+ nnoremap <special> <silent> <MouseMove> :call MouseWasMoved()<CR>
" 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 <MouseMove>
set mousemev&
endfunc
diff --git a/src/testing.c b/src/testing.c
index 572dcdcffe..23ab98f5c1 100644
--- 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
index 1b98b031c7..f36e552907 100644
--- 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,