Re: Patch 9.0.0058
John Marriott wrote: > On 23-July-2022 14:05, Bram Moolenaar wrote: > > Patch 9.0.0058 > > Problem:Win32: cannot test low level events. > > Solution: Add "sendevent" to test_gui_event(). (Yegappan Lakshmanan, > > closes #10679) > > Files: runtime/doc/testing.txt, src/errors.h, src/gui_w32.c, > > src/proto/gui_w32.pro, src/testing.c, src/testdir/test_gui.vim > > > > > After this patch, mingw64 (gcc 12.1.0) throws this warning: > > gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 > -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO > -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return > -fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD gui_w32.c -o > gobjnative/gui_w32.o > gui_w32.c:8552:35: warning: pointer targets in passing argument 2 of > 'dict_get_string' differ in signedness [-Wpointer-sign] > 8552 | event = dict_get_string(args, "event", TRUE); > | ^~~ > | | > | char * > In file included from proto.h:75, > from vim.h:2263, > from gui_w32.c:26: > proto/dict.pro:32:44: note: expected 'char_u *' {aka 'unsigned char *'} > but argument is of type 'char *' > 32 | char_u *dict_get_string(dict_T *d, char_u *key, int save); > | ^~~ > gui_w32.c:8562:44: warning: pointer targets in passing argument 2 of > 'dict_get_number_def' differ in signedness [-Wpointer-sign] > 8562 | vkCode = dict_get_number_def(args, "keycode", 0); > | ^ > | | > | char * > proto/dict.pro:34:52: note: expected 'char_u *' {aka 'unsigned char *'} > but argument is of type 'char *' > 34 | varnumber_T dict_get_number_def(dict_T *d, char_u *key, int def); > | ^~~ > > > The attached patch tries to fix it. Thanks! It looks like nearly all of these calls use a string constant, I'll make the argument "char *" to avoid a lot of type casts. -- Contrary to popular belief, Unix is user friendly. It just happens to be selective about who it makes friends with. -- Dave Parnas /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\help me help AIDS victims -- http://ICCF-Holland.org/// -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/20220723082414.E901D1C0909%40moolenaar.net.
Re: Patch 9.0.0058
On 23-July-2022 14:05, Bram Moolenaar wrote: Patch 9.0.0058 Problem:Win32: cannot test low level events. Solution: Add "sendevent" to test_gui_event(). (Yegappan Lakshmanan, closes #10679) Files: runtime/doc/testing.txt, src/errors.h, src/gui_w32.c, src/proto/gui_w32.pro, src/testing.c, src/testdir/test_gui.vim After this patch, mingw64 (gcc 12.1.0) throws this warning: gcc -c -I. -Iproto -DWIN32 -DWINVER=0x0603 -D_WIN32_WINNT=0x0603 -DHAVE_PATHDEF -DFEAT_NORMAL -DHAVE_STDINT_H -D__USE_MINGW_ANSI_STDIO -pipe -march=native -Wall -O3 -fomit-frame-pointer -freg-struct-return -fpie -fPIE -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD gui_w32.c -o gobjnative/gui_w32.o gui_w32.c:8552:35: warning: pointer targets in passing argument 2 of 'dict_get_string' differ in signedness [-Wpointer-sign] 8552 | event = dict_get_string(args, "event", TRUE); | ^~~ | | | char * In file included from proto.h:75, from vim.h:2263, from gui_w32.c:26: proto/dict.pro:32:44: note: expected 'char_u *' {aka 'unsigned char *'} but argument is of type 'char *' 32 | char_u *dict_get_string(dict_T *d, char_u *key, int save); | ^~~ gui_w32.c:8562:44: warning: pointer targets in passing argument 2 of 'dict_get_number_def' differ in signedness [-Wpointer-sign] 8562 | vkCode = dict_get_number_def(args, "keycode", 0); | ^ | | | char * proto/dict.pro:34:52: note: expected 'char_u *' {aka 'unsigned char *'} but argument is of type 'char *' 34 | varnumber_T dict_get_number_def(dict_T *d, char_u *key, int def); | ^~~ The attached patch tries to fix it. Cheers John -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/ea1584af-b2a2-2ac0-6268-2dca5afaa46f%40internode.on.net. --- gui_w32.c.orig 2022-07-23 16:39:07.751350900 +1000 +++ gui_w32.c 2022-07-23 16:46:55.972852600 +1000 @@ -8549,7 +8549,7 @@ char_u *event; INPUT inputs[1]; -event = dict_get_string(args, "event", TRUE); +event = dict_get_string(args, (char_u *)"event", TRUE); if (event == NULL) return FALSE; @@ -8559,7 +8559,7 @@ { WORDvkCode; - vkCode = dict_get_number_def(args, "keycode", 0); + vkCode = dict_get_number_def(args, (char_u *)"keycode", 0); if (vkCode <= 0 || vkCode >= 0xFF) { semsg(_(e_invalid_argument_nr), (long)vkCode);
Patch 9.0.0058
Patch 9.0.0058 Problem:Win32: cannot test low level events. Solution: Add "sendevent" to test_gui_event(). (Yegappan Lakshmanan, closes #10679) Files: runtime/doc/testing.txt, src/errors.h, src/gui_w32.c, src/proto/gui_w32.pro, src/testing.c, src/testdir/test_gui.vim *** ../vim-9.0.0057/runtime/doc/testing.txt 2022-06-30 22:13:56.200846349 +0100 --- runtime/doc/testing.txt 2022-07-23 04:53:50.664660917 +0100 *** *** 94,99 --- 94,100 "findrepl" search and replace text. "mouse" mouse button click event. "scrollbar" move or drag the scrollbar. + "sendevent" send a low-level GUI event. "tabline" select a tab page by mouse click. "tabmenu" select a tabline menu entry. *** *** 177,182 --- 178,192 dragging: 1 to drag the scrollbar and 0 to click in the scrollbar. + "sendevent": + Send a low-level GUI event (e.g. key-up or down). + Currently only supported on MS-Windows. + The supported items in {args} are: + event: The supported string values are: + keyup generate a keyup event + keydown generate a keydown event + keycode:Keycode to use for a keyup or a keydown event. + "tabline": Inject a mouse click event on the tabline to select a tabpage. The supported items in {args} are: *** ../vim-9.0.0057/src/errors.h2022-06-21 21:15:26.0 +0100 --- src/errors.h2022-07-23 04:58:56.944749759 +0100 *** *** 3303,3306 --- 3303,3308 #ifdef FEAT_EVAL EXTERN char e_substitute_nesting_too_deep[] INIT(= N_("E1290: substitute nesting too deep")); + EXTERN char e_invalid_argument_nr[] + INIT(= N_("E1291: Invalid argument: %ld")); #endif *** ../vim-9.0.0057/src/gui_w32.c 2022-06-27 22:29:57.0 +0100 --- src/gui_w32.c 2022-07-23 04:59:51.140764849 +0100 *** *** 8541,8543 --- 8541,8582 SetPixel(s_hdc, x+2, y, gui.currFgColor); } #endif + + #if defined(FEAT_EVAL) || defined(PROTO) + int + test_gui_w32_sendevent(dict_T *args) + { + char_u*event; + INPUT inputs[1]; + + event = dict_get_string(args, "event", TRUE); + if (event == NULL) + return FALSE; + + ZeroMemory(inputs, sizeof(inputs)); + + if (STRICMP(event, "keydown") == 0 || STRICMP(event, "keyup") == 0) + { + WORDvkCode; + + vkCode = dict_get_number_def(args, "keycode", 0); + if (vkCode <= 0 || vkCode >= 0xFF) + { + semsg(_(e_invalid_argument_nr), (long)vkCode); + return FALSE; + } + + inputs[0].type = INPUT_KEYBOARD; + inputs[0].ki.wVk = vkCode; + if (STRICMP(event, "keyup") == 0) + inputs[0].ki.dwFlags = KEYEVENTF_KEYUP; + SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT)); + } + else + semsg(_(e_invalid_argument_str), event); + + vim_free(event); + + return TRUE; + } + #endif *** ../vim-9.0.0057/src/proto/gui_w32.pro 2022-06-27 23:15:33.0 +0100 --- src/proto/gui_w32.pro 2022-07-23 04:50:06.952580864 +0100 *** *** 96,99 --- 96,100 BalloonEval *gui_mch_create_beval_area(void *target, char_u *mesg, void (*mesgCB)(BalloonEval *, int), void *clientData); void gui_mch_destroy_beval_area(BalloonEval *beval); void netbeans_draw_multisign_indicator(int row); + int test_gui_w32_sendevent(dict_T *args); /* vim: set ft=c : */ *** ../vim-9.0.0057/src/testing.c 2022-06-30 22:28:04.069963729 +0100 --- src/testing.c 2022-07-23 04:50:06.952580864 +0100 *** *** 1500,1505 --- 1500,1511 rettv->v_type = VAR_BOOL; rettv->vval.v_number = FALSE; + if (sandbox != 0) + { + emsg(_(e_not_allowed_in_sandbox)); + return; + } + if (check_for_string_arg(argvars, 0) == FAIL || check_for_dict_arg(argvars, 1) == FAIL || argvars[1].vval.v_dict == NULL) *** *** 1520,1525 --- 1526,1535 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); + # ifdef FEAT_GUI_MSWIN + else if (STRCMP(event, "sendevent") == 0) + rettv->vval.v_number = test_gui_w32_sendevent(argvars[1].vval.v_dict); + # endif else