@orgin
but why don't you remove IDCMP_RAWKEY since you don't need it? If you use both, from my little experience, you will receive standard ascii chars in VANILLAKEY but not in RAWKEY.
i've used this code to get keys (is a small copy & paste from gnash source so it is possible that something is miss)
unsigned char code[10];
struct InputEvent ie;
int actual = 0;
switch(imsg->Code & ~IECODE_UP_PREFIX)
{ case RAWKEY_CRSRUP:
c = gnash::key::UP; break;
case RAWKEY_CRSRDOWN:
c = gnash::key::DOWN;
break;
case RAWKEY_CRSRRIGHT:
c = gnash::key::RIGHT;
break;
case RAWKEY_CRSRLEFT:
c = gnash::key::LEFT;
break;
case RAWKEY_INSERT:
c = gnash::key::INSERT;
break;
case RAWKEY_HOME:
c = gnash::key::HOME;
break;
case RAWKEY_END:
c = gnash::key::END;
break;
case RAWKEY_PAGEUP:
c = gnash::key::PGUP;
break;
case RAWKEY_PAGEDOWN:
c = gnash::key::PGDN;
break;
case RAWKEY_LSHIFT:
case RAWKEY_RSHIFT:
c = gnash::key::SHIFT;
break;
case RAWKEY_LCTRL:
c = gnash::key::CONTROL;
break;
case RAWKEY_LALT:
case RAWKEY_RALT:
c = gnash::key::ALT;
break;
case RAWKEY_F1:
c = gnash::key::F1;
break;
case RAWKEY_F2:
c = gnash::key::F2;
break;
case RAWKEY_F3:
c = gnash::key::F3;
break;
case RAWKEY_F4:
c = gnash::key::F4;
break;
case RAWKEY_F5:
c = gnash::key::F5;
break;
case RAWKEY_F6:
c = gnash::key::F6;
break;
case RAWKEY_F7:
c = gnash::key::F7;
break;
case RAWKEY_F8:
c = gnash::key::F8;
break;
case RAWKEY_F9:
c = gnash::key::F9;
break;
case RAWKEY_F10:
c = gnash::key::F10;
break;
case RAWKEY_F11:
c = gnash::key::F11;
break;
case RAWKEY_F12:
c = gnash::key::F12;
break;
default:
c = gnash::key::INVALID;
break;
}
ie.ie_NextEvent = NULL;
ie.ie_Class = IECLASS_RAWKEY;
ie.ie_SubClass = 0;
ie.ie_Code = imsg->Code;
ie.ie_Qualifier = imsg->Qualifier;
ie.ie_EventAddress=(APTR *) *((ULONG *)imsg->IAddress);
actual = IKeymap->MapRawKey(&ie, (STRPTR)code, 10, NULL);
if (actual == 1)
c = (gnash::key::code)(int)code[0];
So IMHO use RAWKEY instead of VANILLAKEY even the second one is more simply since you receive directly the char