diff --git a/src/evalfunc.c b/src/evalfunc.c
index 711e2e6..2de7016 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -937,11 +937,9 @@
 static argcheck_T arg3_string_string_bool[] = {arg_string, arg_string, arg_bool};
 static argcheck_T arg3_string_string_dict[] = {arg_string, arg_string, arg_dict_any};
 static argcheck_T arg3_string_string_number[] = {arg_string, arg_string, arg_number};
-static argcheck_T arg4_list_number_number_number[] = {arg_list_string, arg_number, arg_number, arg_number};
 static argcheck_T arg4_number_number_string_any[] = {arg_number, arg_number, arg_string, NULL};
 static argcheck_T arg4_string_string_any_string[] = {arg_string, arg_string, NULL, arg_string};
 static argcheck_T arg4_string_string_number_string[] = {arg_string, arg_string, arg_number, arg_string};
-static argcheck_T arg5_number[] = {arg_number, arg_number, arg_number, arg_number, arg_number};
 /* Function specific argument types (not covered by the above) */
 static argcheck_T arg15_assert_fails[] = {arg_string_or_nr, arg_string_or_list_any, NULL, arg_number, arg_string};
 static argcheck_T arg34_assert_inrange[] = {arg_float_or_nr, arg_float_or_nr, arg_float_or_nr, arg_string};
@@ -2337,14 +2335,8 @@
 			ret_void,	    f_test_garbagecollect_soon},
     {"test_getvalue",	1, 1, FEARG_1,	    arg1_string,
 			ret_number,	    f_test_getvalue},
-    {"test_gui_drop_files",	4, 4, 0,    arg4_list_number_number_number,
-			ret_void,	    f_test_gui_drop_files},
-    {"test_gui_mouse_event",	5, 5, 0,    arg5_number,
-			ret_void,	    f_test_gui_mouse_event},
-    {"test_gui_tabline_event",	1, 1, 0,    arg1_number,
-			ret_bool,	    f_test_gui_tabline_event},
-    {"test_gui_tabmenu_event",	2, 2, 0,    arg2_number,
-			ret_void,	    f_test_gui_tabmenu_event},
+    {"test_gui_event",	2, 2, FEARG_1,	    arg2_string_dict,
+			ret_bool,	    f_test_gui_event},
     {"test_ignore_error", 1, 1, FEARG_1,    arg1_string,
 			ret_void,	    f_test_ignore_error},
     {"test_null_blob",	0, 0, 0,	    NULL,
diff --git a/src/proto/testing.pro b/src/proto/testing.pro
index b432b4f..1277a2e 100644
--- a/src/proto/testing.pro
+++ b/src/proto/testing.pro
@@ -34,9 +34,6 @@
 void f_test_void(typval_T *argvars, typval_T *rettv);
 void f_test_scrollbar(typval_T *argvars, typval_T *rettv);
 void f_test_setmouse(typval_T *argvars, typval_T *rettv);
-void f_test_gui_mouse_event(typval_T *argvars, typval_T *rettv);
-void f_test_gui_tabline_event(typval_T *argvars, typval_T *rettv);
-void f_test_gui_tabmenu_event(typval_T *argvars, typval_T *rettv);
+void f_test_gui_event(typval_T *argvars, typval_T *rettv);
 void f_test_settime(typval_T *argvars, typval_T *rettv);
-void f_test_gui_drop_files(typval_T *argvars, typval_T *rettv);
 /* vim: set ft=c : */
diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim
index aeacb31..c4b59c7 100644
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -897,33 +897,45 @@
 
   " place the cursor using left click in normal mode
   call cursor(1, 1)
-  call test_gui_mouse_event(0, 2, 4, 0, 0)
-  call test_gui_mouse_event(3, 2, 4, 0, 0)
+  let args = #{button: 0, row: 2, col: 4, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  eval 'mouse'->test_gui_event(args)
   call feedkeys("\<Esc>", 'Lx!')
   call assert_equal([0, 2, 4, 0], getpos('.'))
 
   " select and yank a word
   let @" = ''
-  call test_gui_mouse_event(0, 1, 9, 0, 0)
-  call test_gui_mouse_event(0, 1, 9, 1, 0)
-  call test_gui_mouse_event(3, 1, 9, 0, 0)
+  let args = #{button: 0, row: 1, col: 9, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.multiclick = 1
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  let args.multiclick = 0
+  call test_gui_event('mouse', args)
   call feedkeys("y", 'Lx!')
   call assert_equal('three', @")
 
   " create visual selection using right click
   let @" = ''
-  call test_gui_mouse_event(0, 2, 6, 0, 0)
-  call test_gui_mouse_event(3, 2, 6, 0, 0)
-  call test_gui_mouse_event(2, 2, 13, 0, 0)
-  call test_gui_mouse_event(3, 2, 13, 0, 0)
+  let args = #{button: 0, row: 2, col: 6, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
+  let args = #{button: 2, row: 2, col: 13, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("y", 'Lx!')
   call assert_equal('five six', @")
 
   " paste using middle mouse button
   let @* = 'abc '
   call feedkeys('""', 'Lx!')
-  call test_gui_mouse_event(1, 1, 9, 0, 0)
-  call test_gui_mouse_event(3, 1, 9, 0, 0)
+  let args = #{button: 1, row: 1, col: 9, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("\<Esc>", 'Lx!')
   call assert_equal(['one two abc three', 'four five six'], getline(1, '$'))
 
@@ -931,17 +943,22 @@
   let @" = ''
   call cursor(1, 1)
   call feedkeys('v', 'Lx!')
-  call test_gui_mouse_event(2, 1, 17, 0, 0)
-  call test_gui_mouse_event(3, 1, 17, 0, 0)
+  let args = #{button: 2, row: 1, col: 17, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("y", 'Lx!')
   call assert_equal('one two abc three', @")
 
   " extend visual selection using mouse drag
   let @" = ''
   call cursor(1, 1)
-  call test_gui_mouse_event(0, 2, 1, 0, 0)
-  call test_gui_mouse_event(0x43, 2, 9, 0, 0)
-  call test_gui_mouse_event(0x3, 2, 9, 0, 0)
+  let args = #{button: 0, row: 2, col: 1, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args = #{button: 0x43, row: 2, col: 9, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 0x3
+  call test_gui_event('mouse', args)
   call feedkeys("y", 'Lx!')
   call assert_equal('four five', @")
 
@@ -949,33 +966,42 @@
   let @" = ''
   call cursor(1, 1)
   redraw!
-  call test_gui_mouse_event(0, 1, 4, 0, 0)
-  call test_gui_mouse_event(0x700, 1, 9, 0, 0)
-  call test_gui_mouse_event(0x700, 1, 13, 0, 0)
-  call test_gui_mouse_event(0x3, 1, 13, 0, 0)
+  let args = #{button: 0, row: 1, col: 4, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 0x700
+  let args.col = 9
+  call test_gui_event('mouse', args)
+  let args.col = 13
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("y", 'Lx!')
   call assert_equal(' two abc t', @")
 
   " Using mouse in insert mode
   call cursor(1, 1)
   call feedkeys('i', 't')
-  call test_gui_mouse_event(0, 2, 11, 0, 0)
-  call test_gui_mouse_event(3, 2, 11, 0, 0)
+  let args = #{button: 0, row: 2, col: 11, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("po\<Esc>", 'Lx!')
   call assert_equal(['one two abc three', 'four five posix'], getline(1, '$'))
 
   %d _
   call setline(1, range(1, 100))
   " scroll up
-  call test_gui_mouse_event(0x200, 2, 1, 0, 0)
-  call test_gui_mouse_event(0x200, 2, 1, 0, 0)
-  call test_gui_mouse_event(0x200, 2, 1, 0, 0)
+  let args = #{button: 0x200, row: 2, col: 1, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  call test_gui_event('mouse', args)
+  call test_gui_event('mouse', args)
   call feedkeys("H", 'Lx!')
   call assert_equal(10, line('.'))
 
   " scroll down
-  call test_gui_mouse_event(0x100, 2, 1, 0, 0)
-  call test_gui_mouse_event(0x100, 2, 1, 0, 0)
+  let args = #{button: 0x100, row: 2, col: 1, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  call test_gui_event('mouse', args)
   call feedkeys("H", 'Lx!')
   call assert_equal(4, line('.'))
 
@@ -983,15 +1009,20 @@
   set nowrap
   call setline(1, range(10)->join('')->repeat(10))
   " scroll left
-  call test_gui_mouse_event(0x500, 1, 5, 0, 0)
-  call test_gui_mouse_event(0x500, 1, 10, 0, 0)
-  call test_gui_mouse_event(0x500, 1, 15, 0, 0)
+  let args = #{button: 0x500, row: 1, col: 5, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.col = 10
+  call test_gui_event('mouse', args)
+  let args.col = 15
+  call test_gui_event('mouse', args)
   call feedkeys('g0', 'Lx!')
   call assert_equal(19, col('.'))
 
   " scroll right
-  call test_gui_mouse_event(0x600, 1, 15, 0, 0)
-  call test_gui_mouse_event(0x600, 1, 10, 0, 0)
+  let args = #{button: 0x600, row: 1, col: 15, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.col = 10
+  call test_gui_event('mouse', args)
   call feedkeys('g0', 'Lx!')
   call assert_equal(7, col('.'))
   set wrap&
@@ -1021,35 +1052,53 @@
   " 0x300- X2)
   for button in [0, 1, 2, 0x300, 0x400]
     " Single click
-    call test_gui_mouse_event(button, 2, 5, 0, 0)
-    call test_gui_mouse_event(3, 2, 5, 0, 0)
+    let args = #{button: button, row: 2, col: 5, multiclick: 0, modifiers: 0}
+    call test_gui_event('mouse', args)
+    let args.button = 3
+    call test_gui_event('mouse', args)
 
     " Double/Triple click is supported by only the Left/Middle/Right mouse
     " buttons
     if button <= 2
       " Double Click
-      call test_gui_mouse_event(button, 2, 5, 0, 0)
-      call test_gui_mouse_event(button, 2, 5, 1, 0)
-      call test_gui_mouse_event(3, 2, 5, 0, 0)
+      let args.button = button
+      call test_gui_event('mouse', args)
+      let args.multiclick = 1
+      call test_gui_event('mouse', args)
+      let args.button = 3
+      let args.multiclick = 0
+      call test_gui_event('mouse', args)
 
       " Triple Click
-      call test_gui_mouse_event(button, 2, 5, 0, 0)
-      call test_gui_mouse_event(button, 2, 5, 1, 0)
-      call test_gui_mouse_event(button, 2, 5, 1, 0)
-      call test_gui_mouse_event(3, 2, 5, 0, 0)
+      let args.button = button
+      call test_gui_event('mouse', args)
+      let args.multiclick = 1
+      call test_gui_event('mouse', args)
+      call test_gui_event('mouse', args)
+      let args.button = 3
+      let args.multiclick = 0
+      call test_gui_event('mouse', args)
     endif
 
     " Shift click
-    call test_gui_mouse_event(button, 3, 7, 0, 4)
-    call test_gui_mouse_event(3, 3, 7, 0, 4)
+    let args = #{button: button, row: 3, col: 7, multiclick: 0, modifiers: 4}
+    call test_gui_event('mouse', args)
+    let args.button = 3
+    call test_gui_event('mouse', args)
 
     " Alt click
-    call test_gui_mouse_event(button, 3, 7, 0, 8)
-    call test_gui_mouse_event(3, 3, 7, 0, 8)
+    let args.button = button
+    let args.modifiers = 8
+    call test_gui_event('mouse', args)
+    let args.button = 3
+    call test_gui_event('mouse', args)
 
     " Ctrl click
-    call test_gui_mouse_event(button, 3, 7, 0, 16)
-    call test_gui_mouse_event(3, 3, 7, 0, 16)
+    let args.button = button
+    let args.modifiers = 16
+    call test_gui_event('mouse', args)
+    let args.button = 3
+    call test_gui_event('mouse', args)
 
     call feedkeys("\<Esc>", 'Lx!')
   endfor
@@ -1079,9 +1128,13 @@
   redraw!
   " Double click should select the word and copy it to clipboard
   let @* = ''
-  call test_gui_mouse_event(0, 2, 11, 0, 0)
-  call test_gui_mouse_event(0, 2, 11, 1, 0)
-  call test_gui_mouse_event(3, 2, 11, 0, 0)
+  let args = #{button: 0, row: 2, col: 11, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.multiclick = 1
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  let args.multiclick = 0
+  call test_gui_event('mouse', args)
   call feedkeys("\<Esc>", 'Lx!')
   call assert_equal([0, 1, 1, 0], getpos('.'))
   call assert_equal('sixteen', @*)
@@ -1089,28 +1142,44 @@
   call cursor(1, 6)
   redraw!
   let @* = ''
-  call test_gui_mouse_event(2, 1, 11, 0, 0)
-  call test_gui_mouse_event(3, 1, 11, 0, 0)
+  let args = #{button: 2, row: 1, col: 11, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("\<Esc>", 'Lx!')
   call assert_equal([0, 1, 6, 0], getpos('.'))
   call assert_equal('wo thr', @*)
   " Middle click should paste the clipboard contents
   call cursor(2, 1)
   redraw!
-  call test_gui_mouse_event(1, 1, 11, 0, 0)
-  call test_gui_mouse_event(3, 1, 11, 0, 0)
+  let args = #{button: 1, row: 1, col: 11, multiclick: 0, modifiers: 0}
+  call test_gui_event('mouse', args)
+  let args.button = 3
+  call test_gui_event('mouse', args)
   call feedkeys("\<Esc>", 'Lx!')
   call assert_equal([0, 2, 7, 0], getpos('.'))
   call assert_equal('wo thrfour five sixteen', getline(2))
   set mouse&
   let &guioptions = save_guioptions
 
-  " Test invalid parameters for test_gui_mouse_event()
-  call assert_fails('call test_gui_mouse_event("", 1, 2, 3, 4)', 'E1210:')
-  call assert_fails('call test_gui_mouse_event(0, "", 2, 3, 4)', 'E1210:')
-  call assert_fails('call test_gui_mouse_event(0, 1, "", 3, 4)', 'E1210:')
-  call assert_fails('call test_gui_mouse_event(0, 1, 2, "", 4)', 'E1210:')
-  call assert_fails('call test_gui_mouse_event(0, 1, 2, 3, "")', 'E1210:')
+  " Test invalid parameters for test_gui_event()
+  let args = #{row: 2, col: 4, multiclick: 0, modifiers: 0}
+  call assert_false(test_gui_event('mouse', args))
+  let args = #{button: 0, col: 4, multiclick: 0, modifiers: 0}
+  call assert_false(test_gui_event('mouse', args))
+  let args = #{button: 0, row: 2, multiclick: 0, modifiers: 0}
+  call assert_false(test_gui_event('mouse', args))
+  let args = #{button: 0, row: 2, col: 4, modifiers: 0}
+  call assert_false(test_gui_event('mouse', args))
+  let args = #{button: 0, row: 2, col: 4, multiclick: 0}
+  call assert_false(test_gui_event('mouse', args))
+
+  " Error cases for test_gui_event()
+  call assert_fails("call test_gui_event('a1b2c3', args)", 'E475:')
+  call assert_fails("call test_gui_event([], args)", 'E1174:')
+  call assert_fails("call test_gui_event('abc', [])", 'E1206:')
+  call assert_fails("call test_gui_event(test_null_string(), {})", 'E475:')
+  call assert_false(test_gui_event('mouse', test_null_dict()))
 
   bw!
   call test_override('no_query_mouse', 0)
@@ -1178,43 +1247,49 @@
   CheckFeature drop_file
 
   call feedkeys(":\"", 'L')
-  call test_gui_drop_files(['a.c', 'b.c'], &lines, 1, 0)
+  let d = #{files: ['a.c', 'b.c'], row: &lines, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call feedkeys("\<CR>", 'L')
 endfunc
 
 func Test_gui_drop_files()
   CheckFeature drop_file
 
-  call assert_fails('call test_gui_drop_files(1, 1, 1, 0)', 'E1211:')
-  call assert_fails('call test_gui_drop_files(["x"], "", 1, 0)', 'E1210:')
-  call assert_fails('call test_gui_drop_files(["x"], 1, "", 0)', 'E1210:')
-  call assert_fails('call test_gui_drop_files(["x"], 1, 1, "")', 'E1210:')
+  call assert_false(test_gui_event("dropfiles", {}))
+  let d = #{row: 1, col: 1, modifiers: 0}
+  call assert_false(test_gui_event("dropfiles", d))
 
   %bw!
   %argdelete
-  call test_gui_drop_files([], 1, 1, 0)
+  let d = #{files: [], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal([], argv())
-  call test_gui_drop_files([1, 2], 1, 1, 0)
+  let d = #{files: [1, 2], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal([], argv())
 
-  call test_gui_drop_files(['a.c', 'b.c'], 1, 1, 0)
+  let d = #{files: ['a.c', 'b.c'], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal(['a.c', 'b.c'], argv())
   %bw!
   %argdelete
-  call test_gui_drop_files([], 1, 1, 0)
+  let d = #{files: [], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal([], argv())
   %bw!
   " if the buffer in the window is modified, then the file should be opened in
   " a new window
   set modified
-  call test_gui_drop_files(['x.c', 'y.c'], 1, 1, 0)
+  let d = #{files: ['x.c', 'y.c'], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal(['x.c', 'y.c'], argv())
   call assert_equal(2, winnr('$'))
   call assert_equal('x.c', bufname(winbufnr(1)))
   %bw!
   %argdelete
   " if Ctrl is pressed, then the file should be opened in a new window
-  call test_gui_drop_files(['s.py', 't.py'], 1, 1, 0x10)
+  let d = #{files: ['s.py', 't.py'], row: 1, col: 1, modifiers: 0x10}
+  eval 'dropfiles'->test_gui_event(d)
   call assert_equal(['s.py', 't.py'], argv())
   call assert_equal(2, winnr('$'))
   call assert_equal('s.py', bufname(winbufnr(1)))
@@ -1222,7 +1297,8 @@
   %argdelete
   " drop the files in a non-current window
   belowright new
-  call test_gui_drop_files(['a.py', 'b.py'], 1, 1, 0)
+  let d = #{files: ['a.py', 'b.py'], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal(['a.py', 'b.py'], argv())
   call assert_equal(2, winnr('$'))
   call assert_equal(1, winnr())
@@ -1234,24 +1310,29 @@
   call mkdir('Xdir1')
   call writefile([], 'Xdir1/Xfile1')
   call writefile([], 'Xdir1/Xfile2')
-  call test_gui_drop_files(['Xdir1/Xfile1', 'Xdir1/Xfile2'], 1, 1, 0x4)
+  let d = #{files: ['Xdir1/Xfile1', 'Xdir1/Xfile2'], row: 1, col: 1,
+        \ modifiers: 0x4}
+  call test_gui_event('dropfiles', d)
   call assert_equal('Xdir1', fnamemodify(getcwd(), ':t'))
   call assert_equal('Xfile1', @%)
   call chdir(save_cwd)
   " pressing shift when dropping directory and files should change directory
-  call test_gui_drop_files(['Xdir1', 'Xdir1/Xfile2'], 1, 1, 0x4)
+  let d = #{files: ['Xdir1', 'Xdir1/Xfile2'], row: 1, col: 1, modifiers: 0x4}
+  call test_gui_event('dropfiles', d)
   call assert_equal('Xdir1', fnamemodify(getcwd(), ':t'))
   call assert_equal('Xdir1', fnamemodify(@%, ':t'))
   call chdir(save_cwd)
   %bw!
   %argdelete
   " dropping a directory should edit it
-  call test_gui_drop_files(['Xdir1'], 1, 1, 0)
+  let d = #{files: ['Xdir1'], row: 1, col: 1, modifiers: 0}
+  call test_gui_event('dropfiles', d)
   call assert_equal('Xdir1', @%)
   %bw!
   %argdelete
   " dropping only a directory name with Shift should ignore it
-  call test_gui_drop_files(['Xdir1'], 1, 1, 0x4)
+  let d = #{files: ['Xdir1'], row: 1, col: 1, modifiers: 0x4}
+  call test_gui_event('dropfiles', d)
   call assert_equal('', @%)
   %bw!
   %argdelete
@@ -1274,16 +1355,16 @@
   tabedit Xfile3
 
   tabfirst
-  call assert_equal(v:true, test_gui_tabline_event(2))
+  call assert_equal(v:true, test_gui_event('tabline', #{tabnr: 2}))
   call feedkeys("y", "Lx!")
   call assert_equal(2, tabpagenr())
-  call assert_equal(v:true, test_gui_tabline_event(3))
+  call assert_equal(v:true, test_gui_event('tabline', #{tabnr: 3}))
   call feedkeys("y", "Lx!")
   call assert_equal(3, tabpagenr())
-  call assert_equal(v:false, test_gui_tabline_event(3))
+  call assert_equal(v:false, 'tabline'->test_gui_event(#{tabnr: 3}))
 
   " From the cmdline window, tabline event should not be handled
-  call feedkeys("q::let t = test_gui_tabline_event(2)\<CR>:q\<CR>", 'x!')
+  call feedkeys("q::let t = test_gui_event('tabline', #{tabnr: 2})\<CR>:q\<CR>", 'x!')
   call assert_equal(v:false, t)
 
   %bw!
@@ -1294,25 +1375,25 @@
   %bw!
 
   " Try to close the last tab page
-  call test_gui_tabmenu_event(1, 1)
+  call test_gui_event('tabmenu', #{tabnr: 1, item: 1})
   call feedkeys("y", "Lx!")
 
   edit Xfile1
   tabedit Xfile2
-  call test_gui_tabmenu_event(1, 1)
+  call test_gui_event('tabmenu', #{tabnr: 1, item: 1})
   call feedkeys("y", "Lx!")
   call assert_equal(1, tabpagenr('$'))
   call assert_equal('Xfile2', bufname())
 
-  call test_gui_tabmenu_event(1, 2)
+  eval 'tabmenu'->test_gui_event(#{tabnr: 1, item: 2})
   call feedkeys("y", "Lx!")
   call assert_equal(2, tabpagenr('$'))
 
   " If tabnr is 0, then the current tabpage should be used.
-  call test_gui_tabmenu_event(0, 2)
+  call test_gui_event('tabmenu', #{tabnr: 0, item: 2})
   call feedkeys("y", "Lx!")
   call assert_equal(3, tabpagenr('$'))
-  call test_gui_tabmenu_event(0, 1)
+  call test_gui_event('tabmenu', #{tabnr: 0, item: 1})
   call feedkeys("y", "Lx!")
   call assert_equal(2, tabpagenr('$'))
 
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index b3c4dd0..16be67c 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -4069,21 +4069,10 @@
   v9.CheckDefAndScriptFailure(['test_getvalue(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1'])
 enddef
 
-def Test_test_gui_drop_files()
+def Test_test_gui_event()
   CheckGui
-  v9.CheckDefAndScriptFailure(['test_gui_drop_files("a", 1, 1, 0)'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1'])
-  v9.CheckDefAndScriptFailure(['test_gui_drop_files(["x"], "", 1, 0)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
-  v9.CheckDefAndScriptFailure(['test_gui_drop_files(["x"], 1, "", 0)'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
-  v9.CheckDefAndScriptFailure(['test_gui_drop_files(["x"], 1, 1, "")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
-enddef
-
-def Test_test_gui_mouse_event()
-  CheckGui
-  v9.CheckDefAndScriptFailure(['test_gui_mouse_event(1.1, 1, 1, 1, 1)'], ['E1013: Argument 1: type mismatch, expected number but got float', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['test_gui_mouse_event(1, "1", 1, 1, 1)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
-  v9.CheckDefAndScriptFailure(['test_gui_mouse_event(1, 1, "1", 1, 1)'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
-  v9.CheckDefAndScriptFailure(['test_gui_mouse_event(1, 1, 1, "1", 1)'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
-  v9.CheckDefAndScriptFailure(['test_gui_mouse_event(1, 1, 1, 1, "1")'], ['E1013: Argument 5: type mismatch, expected number but got string', 'E1210: Number required for argument 5'])
+  v9.CheckDefAndScriptFailure(['test_gui_event([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['test_gui_event("abc", 1)'], ['E1013: Argument 2: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_test_ignore_error()
diff --git a/src/testing.c b/src/testing.c
index 9367f3c..4f3c2cb 100644
--- a/src/testing.c
+++ b/src/testing.c
@@ -1315,78 +1315,9 @@
     mouse_col = (time_t)tv_get_number(&argvars[1]) - 1;
 }
 
-    void
-f_test_gui_mouse_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
-{
 # ifdef FEAT_GUI
-    int		button;
-    int		row;
-    int		col;
-    int		repeated_click;
-    int_u	mods;
-
-    if (check_for_number_arg(argvars, 0) == FAIL
-	    || check_for_number_arg(argvars, 1) == FAIL
-	    || check_for_number_arg(argvars, 2) == FAIL
-	    || check_for_number_arg(argvars, 3) == FAIL
-	    || check_for_number_arg(argvars, 4) == FAIL)
-	return;
-
-    button = tv_get_number(&argvars[0]);
-    row = tv_get_number(&argvars[1]);
-    col = tv_get_number(&argvars[2]);
-    repeated_click = tv_get_number(&argvars[3]);
-    mods = tv_get_number(&argvars[4]);
-
-    gui_send_mouse_event(button, TEXT_X(col - 1), TEXT_Y(row - 1), repeated_click, mods);
-# endif
-}
-
-    void
-f_test_gui_tabline_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
-{
-# ifdef FEAT_GUI_TABLINE
-    int	tabnr;
-
-    if (check_for_number_arg(argvars, 0) == FAIL)
-	return;
-
-    tabnr = tv_get_number(&argvars[0]);
-
-    rettv->v_type = VAR_BOOL;
-    rettv->vval.v_number = send_tabline_event(tabnr);
-# endif
-}
-
-    void
-f_test_gui_tabmenu_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
-{
-# ifdef FEAT_GUI_TABLINE
-    int	tabnr;
-    int	event;
-
-    if (check_for_number_arg(argvars, 0) == FAIL
-	    || check_for_number_arg(argvars, 1) == FAIL)
-	return;
-
-    tabnr = tv_get_number(&argvars[0]);
-    event = tv_get_number(&argvars[1]);
-
-    send_tabline_menu_event(tabnr, event);
-# endif
-}
-
-    void
-f_test_settime(typval_T *argvars, typval_T *rettv UNUSED)
-{
-    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
-	return;
-
-    time_for_testing = (time_t)tv_get_number(&argvars[0]);
-}
-
-    void
-f_test_gui_drop_files(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
+    static int
+test_gui_drop_files(dict_T *args UNUSED)
 {
 #if defined(HAVE_DROP_FILE)
     int		row;
@@ -1394,26 +1325,29 @@
     int_u	mods;
     char_u	**fnames;
     int		count = 0;
+    typval_T	t;
     list_T	*l;
     listitem_T	*li;
 
-    if (check_for_list_arg(argvars, 0) == FAIL
-	    || check_for_number_arg(argvars, 1) == FAIL
-	    || check_for_number_arg(argvars, 2) == FAIL
-	    || check_for_number_arg(argvars, 3) == FAIL)
-	return;
+    if (dict_find(args, (char_u *)"files", -1) == NULL
+	    || dict_find(args, (char_u *)"row", -1) == NULL
+	    || dict_find(args, (char_u *)"col", -1) == NULL
+	    || dict_find(args, (char_u *)"modifiers", -1) == NULL)
+	return FALSE;
 
-    row = tv_get_number(&argvars[1]);
-    col = tv_get_number(&argvars[2]);
-    mods = tv_get_number(&argvars[3]);
+    if (dict_get_tv(args, (char_u *)"files", &t) == FAIL)
+	return FALSE;
+    row = (int)dict_get_number(args, (char_u *)"row");
+    col = (int)dict_get_number(args, (char_u *)"col");
+    mods = (int)dict_get_number(args, (char_u *)"modifiers");
 
-    l = argvars[0].vval.v_list;
+    l = t.vval.v_list;
     if (list_len(l) == 0)
-	return;
+	return FALSE;
 
     fnames = ALLOC_MULT(char_u *, list_len(l));
     if (fnames == NULL)
-	return;
+	return FALSE;
 
     FOR_ALL_LIST_ITEMS(l, li)
     {
@@ -1427,7 +1361,7 @@
 	    while (--count >= 0)
 		vim_free(fnames[count]);
 	    vim_free(fnames);
-	    return;
+	    return FALSE;
 	}
 	count++;
     }
@@ -1437,6 +1371,112 @@
     else
 	vim_free(fnames);
 # endif
+
+    return TRUE;
+}
+
+    static int
+test_gui_mouse_event(dict_T *args UNUSED)
+{
+    int		button;
+    int		row;
+    int		col;
+    int		repeated_click;
+    int_u	mods;
+
+    if (dict_find(args, (char_u *)"button", -1) == NULL
+	    || dict_find(args, (char_u *)"row", -1) == NULL
+	    || dict_find(args, (char_u *)"col", -1) == NULL
+	    || dict_find(args, (char_u *)"multiclick", -1) == NULL
+	    || dict_find(args, (char_u *)"modifiers", -1) == NULL)
+	return FALSE;
+
+    button = (int)dict_get_number(args, (char_u *)"button");
+    row = (int)dict_get_number(args, (char_u *)"row");
+    col = (int)dict_get_number(args, (char_u *)"col");
+    repeated_click = (int)dict_get_number(args, (char_u *)"multiclick");
+    mods = (int)dict_get_number(args, (char_u *)"modifiers");
+
+    gui_send_mouse_event(button, TEXT_X(col - 1), TEXT_Y(row - 1),
+							repeated_click, mods);
+    return TRUE;
+}
+
+    static int
+test_gui_tabline_event(dict_T *args UNUSED)
+{
+# ifdef FEAT_GUI_TABLINE
+    int		tabnr;
+
+    if (dict_find(args, (char_u *)"tabnr", -1) == NULL)
+	return FALSE;
+
+    tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
+
+    return send_tabline_event(tabnr);
+# else
+    return FALSE;
+# endif
+}
+
+    static int
+test_gui_tabmenu_event(dict_T *args UNUSED)
+{
+# ifdef FEAT_GUI_TABLINE
+    int	tabnr;
+    int	item;
+
+    if (dict_find(args, (char_u *)"tabnr", -1) == NULL
+	    || dict_find(args, (char_u *)"item", -1) == NULL)
+	return FALSE;
+
+    tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
+    item = (int)dict_get_number(args, (char_u *)"item");
+
+    send_tabline_menu_event(tabnr, item);
+# endif
+    return TRUE;
+}
+# endif
+
+    void
+f_test_gui_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
+{
+# ifdef FEAT_GUI
+    char_u	*event;
+
+    rettv->v_type = VAR_BOOL;
+    rettv->vval.v_number = FALSE;
+
+    if (check_for_string_arg(argvars, 0) == FAIL
+	    || check_for_dict_arg(argvars, 1) == FAIL
+	    || argvars[1].vval.v_dict == NULL)
+	return;
+
+    event = tv_get_string(&argvars[0]);
+    if (STRCMP(event, "dropfiles") == 0)
+	rettv->vval.v_number = test_gui_drop_files(argvars[1].vval.v_dict);
+    else if (STRCMP(event, "mouse") == 0)
+	rettv->vval.v_number = test_gui_mouse_event(argvars[1].vval.v_dict);
+    else if (STRCMP(event, "tabline") == 0)
+	rettv->vval.v_number = test_gui_tabline_event(argvars[1].vval.v_dict);
+    else if (STRCMP(event, "tabmenu") == 0)
+	rettv->vval.v_number = test_gui_tabmenu_event(argvars[1].vval.v_dict);
+    else
+    {
+	semsg(_(e_invalid_argument_str), event);
+	return;
+    }
+# endif
+}
+
+    void
+f_test_settime(typval_T *argvars, typval_T *rettv UNUSED)
+{
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
+    time_for_testing = (time_t)tv_get_number(&argvars[0]);
 }
 
 #endif // defined(FEAT_EVAL)
diff --git a/src/version.c b/src/version.c
index a0f0037..5a99b06 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4259,
+/**/
     4258,
 /**/
     4257,
