[Vm-dev] [Windows cog vm] [Keyboard events related] about keycode mapping

Guillermo Polito guillermopolito at gmail.com
Thu Jan 26 14:17:13 UTC 2012


Sure!

I'm not generating Char events for F11 ;).  Since F11 does not generate
Char events.

The problem is that the *p* key generates the same KeyDown event than F11
for the vm.  I'm only fixing that:

KeyDown and KeyUp events for p key and F1 keys have different keyCodes.
 I'm not sure if there will still be collisions, but right now, they are
with the code as it is.

Guille

On Thu, Jan 26, 2012 at 11:02 AM, Andreas Raab <andreas.raab at gmx.de> wrote:

>
>  On 1/26/2012 14:52, Guillermo Polito wrote:
>
>
>
> Hi!
>
>  I was playing to add Function Ket support in the windows vm (yep, always
> the same :P), and looking at the code, I saw this in the
> recordKeyboardEvent:
>
>  evt = (sqKeyboardEvent*) sqNextEventPut();
>   evt->type = EventTypeKeyboard;
>   evt->timeStamp = msg->time;
> *  evt->charCode = keymap[keyCode & 0xff];*
>  *
> *
> the problem with that line is that KeyDown and KeyUp events send
> VirtualKeycodes as keycodes and the Char event sends a unicode char value.
>  And, it makes collisions, since for example
>
>  $p char value is 112
> and F1 virtual code value is 112 too :P
>
>
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms646276(v=vs.85).aspx
>
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms646281(v=vs.85).aspx
>
> http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
>
>  And so with other keys, having the same keycode in the image side with
> different keys...
>
>  I'm trying a solution like this, providing in a Char event the keycode
> without mapping to the image:
>
>  ...
>      case WM_CHAR:
>     case WM_SYSCHAR:
>       /* Note: VK_RETURN is recorded as virtual key ONLY */
>       if(keyCode == 13) return 1;
>     *  charCode = keyCode;*
>       pressCode = EventKeyChar;
>       break
> ...
>  evt->timeStamp = msg->time;
>  *  evt->charCode = charCode? charCode : keymap[keyCode & 0xff];*
>    evt->pressCode = pressCode;
>  ...
>
>  changing only the bold lines, and It seems to work.
>
>  What do you think?
>
>
> The change makes no sense (it will break most non-ascii input like
> accents, umlauts, etc). You really shouldn't be using character events for
> handling function keys. There is no 'F11 Character' in any character
> encoding world-wide so trying to represent F11 as a character is completely
> futile. You need to use keyDown and keyUp events, since F11 & friends are
> KEYs not CHARACTERs.
>
> Cheers,
>   - Andreas
>
>
>  Guille
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20120126/4b04c5fa/attachment.htm


More information about the Vm-dev mailing list