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

Andreas Raab andreas.raab at gmx.de
Thu Jan 26 14:02:42 UTC 2012


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/ms646276%28v=vs.85%29.aspx> 
>
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms646281(v=vs.85).aspx 
> <http://msdn.microsoft.com/en-us/library/windows/desktop/ms646281%28v=vs.85%29.aspx> 
>
> http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx 
> <http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.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/78030b95/attachment.htm


More information about the Vm-dev mailing list