On 22 November 2011 15:51, Guillermo Polito guillermopolito@gmail.com wrote:
So far, what I've learnt/found :).
I assume my build is using X11-display, since my keyboard events are generated there :P.
The X11 keyboard events are adapted to sq events in sqUnixX11.c >> x2sqKeyPlain
This build uses XLookupString, which brings char codes in Latin 1 instead of UTF-8. But X11 seems to support UTF-8 :/.
When pressing a function key, XLookupString does not fill the buffer with chars... and the KeySym is not handled. I added a line like
case XK_F1: return 50;
and
Character class>>F1 ^ self value: 50
to test, and It works :). But I'm not sure which code is better to be returned yet :P.
- My image now handles the F1, but only the keyDown and keyUp, since in sqUnixX11.c >> handleEvent I have something like:
if (ucs4) /* only generate a key char event if there's a code. */ recordKeyboardEvent(keyCode, EventKeyChar, modifierState, ucs4);
- I tried commenting the if, but that generates some garbage in my image when pressing Alt, Shift, Control...
because these keys are not producing "characters", but they are kind of "meta" keys which could modify the input. as far as i understood, this line of code tells that it generates the "KeyChar" event only if there's a character key pressed. for other keys, like arrows, home/pgUp/pgDn etc you have key codes, but not char codes, because there is no direct mapping between them and any ascii/unicode character.
imagine that all keys on your keyboard having a number. Esc - 1 , F1 - 2 , etc. So, these numbers are key codes. Now some keys can be directly translated to characters when pressed (depending on keyboard layout/language settings), but some of them not, and has only the key code.
So, some questions I have at this point:
- Which are the restrictions on the codes returned on translateCode (point 4) ? Are they ascii characters? In the image I see the value is the keychar + the modifiers encoded
- Based on the prior question, Which codes should be assigned to function keys?
- I don't fully understand yet what a ucs4 code is, but the keysyms are translated to them in sqUnixX11.c >> xkeysym2ucs4 which looks pretty magical :). Does someone know how this works? The comments are not really helpful :(.
cannot help with it, i am complete newbie concerning unix/X11 keyboard handling.
Thanks! Guille, vming :)