Re: Patch 9.0.0058

2022-07-23 Fir de Conversatie Bram Moolenaar

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

2022-07-22 Fir de Conversatie John Marriott


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

2022-07-22 Fir de Conversatie Bram Moolenaar


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