[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