converted win32 to use unicode based KeyID.

This commit is contained in:
crs 2002-07-23 18:59:15 +00:00
parent 8271c8accc
commit 7129efc9ab
3 changed files with 294 additions and 698 deletions

View File

@ -463,361 +463,10 @@ CMSWindowsSecondaryScreen::setToggleState(KeyModifierMask mask)
} }
} }
// these tables map KeyID (a X windows KeySym) to virtual key codes. // map special KeyID keys to virtual key codes. if the key is an
// if the key is an extended key then the entry is the virtual key // extended key then the entry is the virtual key code | 0x100.
// code | 0x100. keys that map to normal characters have a 0 entry // unmapped keys have a 0 entry.
// and the conversion is done elsewhere. static const UINT g_mapEE00[] =
static const UINT g_latin1[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin2[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin3[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin4[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin5[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin6[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin7[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin8[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_latin9[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_terminal[] =
{
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x18 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x28 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x30 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x68 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x78 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x88 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x98 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xa8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xb8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xc8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xd8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xe8 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
};
static const UINT g_function[] =
{ {
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x08 */ 0, 0, 0, 0, 0, 0, 0, 0,
@ -852,8 +501,7 @@ static const UINT g_function[] =
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0 /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, 0
}; };
/* XK_KP_Space to XK_KP_Equal */ static const UINT g_mapEF00[] =
static const UINT g_miscellany[] =
{ {
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x08 */ VK_BACK, VK_TAB, 0, VK_CLEAR, 0, VK_RETURN, 0, 0, /* 0x08 */ VK_BACK, VK_TAB, 0, VK_CLEAR, 0, VK_RETURN, 0, 0,
@ -894,61 +542,6 @@ static const UINT g_miscellany[] =
/* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, VK_DELETE|0x100 /* 0xf8 */ 0, 0, 0, 0, 0, 0, 0, VK_DELETE|0x100
}; };
static const UINT* g_katakana = NULL;
static const UINT* g_arabic = NULL;
static const UINT* g_cyrillic = NULL;
static const UINT* g_greek = NULL;
static const UINT* g_technical = NULL;
static const UINT* g_special = NULL;
static const UINT* g_publishing = NULL;
static const UINT* g_apl = NULL;
static const UINT* g_hebrew = NULL;
static const UINT* g_thai = NULL;
static const UINT* g_korean = NULL;
static const UINT* g_armenian = NULL;
static const UINT* g_georgian = NULL;
static const UINT* g_azeri = NULL;
static const UINT* g_vietnamese = NULL;
static const UINT* g_currency = NULL;
static const UINT* g_mapTable[] =
{
/* 0x00 */ g_latin1, g_latin2, g_latin3, g_latin4,
/* 0x04 */ g_katakana, g_arabic, g_cyrillic, g_greek,
/* 0x08 */ g_technical, g_special, g_publishing, g_apl,
/* 0x0c */ g_hebrew, g_thai, g_korean, NULL,
/* 0x10 */ NULL, NULL, g_latin8, g_latin9,
/* 0x14 */ g_armenian, g_georgian, g_azeri, NULL,
/* 0x18 */ NULL, NULL, NULL, NULL, NULL, NULL, g_vietnamese, NULL,
/* 0x20 */ g_currency, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x28 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x30 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x38 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x40 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x48 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x50 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x58 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x60 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x68 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x70 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x78 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x80 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x88 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x90 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x98 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xa0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xa8 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xb0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xb8 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xc0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xc8 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xd0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xd8 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xe0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xe8 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xf0 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0xf8 */ NULL, NULL, NULL, NULL,
/* 0xfc */ NULL, g_terminal, g_function, g_miscellany
};
DWORD DWORD
CMSWindowsSecondaryScreen::mapButton(ButtonID button, bool press) const CMSWindowsSecondaryScreen::mapButton(ButtonID button, bool press) const
@ -973,19 +566,25 @@ KeyModifierMask
CMSWindowsSecondaryScreen::mapKey(Keystrokes& keys, UINT& virtualKey, CMSWindowsSecondaryScreen::mapKey(Keystrokes& keys, UINT& virtualKey,
KeyID id, KeyModifierMask mask, EKeyAction action) const KeyID id, KeyModifierMask mask, EKeyAction action) const
{ {
// lookup the key table virtualKey = 0;
const UInt32 mapID = ((id >> 8) & 0xff);
const UINT* map = g_mapTable[mapID]; // check for special keys
if (map == NULL) { if ((id & 0xfffff000) == 0xe000) {
// unknown key if ((id & 0xff00) == 0xee00) {
virtualKey = g_mapEE00[id & 0xff];
}
else if ((id & 0xff00) == 0xef00) {
virtualKey = g_mapEF00[id & 0xff];
}
if (virtualKey == 0) {
log((CLOG_DEBUG2 "unknown special key"));
return m_mask; return m_mask;
} }
}
// look up virtual key for id. default output mask carries over // get output mask. default output mask carries over the current
// the current toggle modifier states and includes desired shift, // toggle modifier states and includes desired shift, control, alt,
// control, alt, and meta states. // and meta states.
const UInt32 code = (id & 0xff);
virtualKey = map[code];
KeyModifierMask outMask = (m_mask & KeyModifierMask outMask = (m_mask &
(KeyModifierCapsLock | (KeyModifierCapsLock |
KeyModifierNumLock | KeyModifierNumLock |
@ -995,24 +594,19 @@ CMSWindowsSecondaryScreen::mapKey(Keystrokes& keys, UINT& virtualKey,
KeyModifierControl | KeyModifierControl |
KeyModifierAlt | KeyModifierAlt |
KeyModifierMeta)); KeyModifierMeta));
log((CLOG_DEBUG2 "key id %d -> virtual key %d", id, virtualKey));
// extract extended key flag // extract extended key flag
const bool isExtended = ((virtualKey & 0x100) != 0); const bool isExtended = ((virtualKey & 0x100) != 0);
virtualKey &= ~0x100; virtualKey &= ~0x100;
// if not in map then ask system to convert ascii character // if not in map then ask system to convert character
if (virtualKey == 0) { if (virtualKey == 0) {
if (mapID != 0) {
// not ascii
log((CLOG_DEBUG2 "not ascii"));
return m_mask;
}
// translate. return no keys if unknown key. // translate. return no keys if unknown key.
SHORT vk = VkKeyScan(static_cast<TCHAR>(code)); // FIXME -- handle unicode
TCHAR ascii = static_cast<TCHAR>(id & 0x000000ff);
SHORT vk = VkKeyScan(ascii);
if (vk == 0xffff) { if (vk == 0xffff) {
log((CLOG_DEBUG2 "no virtual key for character %d", code)); log((CLOG_DEBUG2 "no virtual key for character %d", id));
return m_mask; return m_mask;
} }
@ -1032,14 +626,13 @@ CMSWindowsSecondaryScreen::mapKey(Keystrokes& keys, UINT& virtualKey,
if (HIBYTE(vk) & 4) { if (HIBYTE(vk) & 4) {
outMask |= KeyModifierAlt; outMask |= KeyModifierAlt;
} }
log((CLOG_DEBUG2 "character %d to virtual key %d mask 0x%04x", code, LOBYTE(vk), outMask));
// handle combination of caps-lock and shift. if caps-lock is // handle combination of caps-lock and shift. if caps-lock is
// off locally then use shift as necessary. if caps-lock is on // off locally then use shift as necessary. if caps-lock is on
// locally then it reverses the meaning of shift for keys that // locally then it reverses the meaning of shift for keys that
// are subject to case conversion. // are subject to case conversion.
if ((outMask & KeyModifierCapsLock) != 0) { if ((outMask & KeyModifierCapsLock) != 0) {
if (tolower(code) != toupper(code)) { if (tolower(ascii) != toupper(ascii)) {
log((CLOG_DEBUG2 "flip shift")); log((CLOG_DEBUG2 "flip shift"));
outMask ^= KeyModifierShift; outMask ^= KeyModifierShift;
} }
@ -1072,11 +665,12 @@ CMSWindowsSecondaryScreen::mapKey(Keystrokes& keys, UINT& virtualKey,
} }
} }
// check for ISO_Left_Tab // check for left tab
else if (id == 0xfe20) { else if (id == kKeyLeftTab) {
outMask |= KeyModifierShift; outMask |= KeyModifierShift;
} }
} }
log((CLOG_DEBUG2 "KeyID %d to virtual key %d mask 0x%04x", id, virtualKey, outMask));
// a list of modifier key info // a list of modifier key info
class CModifierInfo { class CModifierInfo {

View File

@ -592,61 +592,61 @@ static const KeyID g_virtualKey[] =
/* 0x00 */ kKeyNone, // reserved /* 0x00 */ kKeyNone, // reserved
/* 0x01 */ kKeyNone, // VK_LBUTTON /* 0x01 */ kKeyNone, // VK_LBUTTON
/* 0x02 */ kKeyNone, // VK_RBUTTON /* 0x02 */ kKeyNone, // VK_RBUTTON
/* 0x03 */ 0xff6b, // VK_CANCEL XK_Break /* 0x03 */ kKeyBreak, // VK_CANCEL
/* 0x04 */ kKeyNone, // VK_MBUTTON /* 0x04 */ kKeyNone, // VK_MBUTTON
/* 0x05 */ kKeyNone, // undefined /* 0x05 */ kKeyNone, // undefined
/* 0x06 */ kKeyNone, // undefined /* 0x06 */ kKeyNone, // undefined
/* 0x07 */ kKeyNone, // undefined /* 0x07 */ kKeyNone, // undefined
/* 0x08 */ 0xff08, // VK_BACK XK_Backspace /* 0x08 */ kKeyBackSpace, // VK_BACK
/* 0x09 */ 0xff09, // VK_TAB VK_Tab /* 0x09 */ kKeyTab, // VK_TAB
/* 0x0a */ kKeyNone, // undefined /* 0x0a */ kKeyNone, // undefined
/* 0x0b */ kKeyNone, // undefined /* 0x0b */ kKeyNone, // undefined
/* 0x0c */ 0xff0b, // VK_CLEAR XK_Clear /* 0x0c */ kKeyClear, // VK_CLEAR
/* 0x0d */ 0xff0d, // VK_RETURN XK_Return /* 0x0d */ kKeyReturn, // VK_RETURN
/* 0x0e */ kKeyNone, // undefined /* 0x0e */ kKeyNone, // undefined
/* 0x0f */ kKeyNone, // undefined /* 0x0f */ kKeyNone, // undefined
/* 0x10 */ 0xffe1, // VK_SHIFT XK_Shift_L /* 0x10 */ kKeyShift_L, // VK_SHIFT
/* 0x11 */ 0xffe3, // VK_CONTROL XK_Control_L /* 0x11 */ kKeyControl_L, // VK_CONTROL
/* 0x12 */ 0xffe9, // VK_MENU XK_Alt_L /* 0x12 */ kKeyAlt_L, // VK_MENU
/* 0x13 */ 0xff13, // VK_PAUSE XK_Pause /* 0x13 */ kKeyPause, // VK_PAUSE
/* 0x14 */ 0xffe5, // VK_CAPITAL XK_Caps_Lock /* 0x14 */ kKeyCapsLock, // VK_CAPITAL
/* 0x15 */ kKeyNone, // VK_KANA /* 0x15 */ kKeyNone, // VK_KANA
/* 0x16 */ kKeyNone, // VK_HANGUL /* 0x16 */ kKeyNone, // VK_HANGUL
/* 0x17 */ kKeyNone, // VK_JUNJA /* 0x17 */ kKeyNone, // VK_JUNJA
/* 0x18 */ kKeyNone, // VK_FINAL /* 0x18 */ kKeyNone, // VK_FINAL
/* 0x19 */ kKeyNone, // VK_KANJI /* 0x19 */ kKeyNone, // VK_KANJI
/* 0x1a */ kKeyNone, // undefined /* 0x1a */ kKeyNone, // undefined
/* 0x1b */ 0xff1b, // VK_ESCAPE XK_Escape /* 0x1b */ kKeyEscape, // VK_ESCAPE
/* 0x1c */ kKeyNone, // VK_CONVERT /* 0x1c */ kKeyNone, // VK_CONVERT
/* 0x1d */ kKeyNone, // VK_NONCONVERT /* 0x1d */ kKeyNone, // VK_NONCONVERT
/* 0x1e */ kKeyNone, // VK_ACCEPT /* 0x1e */ kKeyNone, // VK_ACCEPT
/* 0x1f */ kKeyNone, // VK_MODECHANGE /* 0x1f */ kKeyNone, // VK_MODECHANGE
/* 0x20 */ 0x0020, // VK_SPACE XK_space /* 0x20 */ 0x0020, // VK_SPACE
/* 0x21 */ 0xff55, // VK_PRIOR XK_Prior /* 0x21 */ kKeyPageUp, // VK_PRIOR
/* 0x22 */ 0xff56, // VK_NEXT XK_Next /* 0x22 */ kKeyPageDown, // VK_NEXT
/* 0x23 */ 0xff57, // VK_END XK_End /* 0x23 */ kKeyEnd, // VK_END
/* 0x24 */ 0xff50, // VK_HOME XK_Home /* 0x24 */ kKeyHome, // VK_HOME
/* 0x25 */ 0xff51, // VK_LEFT XK_Left /* 0x25 */ kKeyLeft, // VK_LEFT
/* 0x26 */ 0xff52, // VK_UP XK_Up /* 0x26 */ kKeyUp, // VK_UP
/* 0x27 */ 0xff53, // VK_RIGHT XK_Right /* 0x27 */ kKeyRight, // VK_RIGHT
/* 0x28 */ 0xff54, // VK_DOWN XK_Down /* 0x28 */ kKeyDown, // VK_DOWN
/* 0x29 */ 0xff60, // VK_SELECT XK_Select /* 0x29 */ kKeySelect, // VK_SELECT
/* 0x2a */ kKeyNone, // VK_PRINT /* 0x2a */ kKeyNone, // VK_PRINT
/* 0x2b */ 0xff62, // VK_EXECUTE XK_Execute /* 0x2b */ kKeyExecute, // VK_EXECUTE
/* 0x2c */ 0xff61, // VK_SNAPSHOT XK_Print /* 0x2c */ kKeyPrint, // VK_SNAPSHOT
/* 0x2d */ 0xff63, // VK_INSERT XK_Insert /* 0x2d */ kKeyInsert, // VK_INSERT
/* 0x2e */ 0xffff, // VK_DELETE XK_Delete /* 0x2e */ kKeyDelete, // VK_DELETE
/* 0x2f */ 0xff6a, // VK_HELP XK_Help /* 0x2f */ kKeyHelp, // VK_HELP
/* 0x30 */ kKeyNone, // VK_0 XK_0 /* 0x30 */ kKeyNone, // VK_0
/* 0x31 */ kKeyNone, // VK_1 XK_1 /* 0x31 */ kKeyNone, // VK_1
/* 0x32 */ kKeyNone, // VK_2 XK_2 /* 0x32 */ kKeyNone, // VK_2
/* 0x33 */ kKeyNone, // VK_3 XK_3 /* 0x33 */ kKeyNone, // VK_3
/* 0x34 */ kKeyNone, // VK_4 XK_4 /* 0x34 */ kKeyNone, // VK_4
/* 0x35 */ kKeyNone, // VK_5 XK_5 /* 0x35 */ kKeyNone, // VK_5
/* 0x36 */ kKeyNone, // VK_6 XK_6 /* 0x36 */ kKeyNone, // VK_6
/* 0x37 */ kKeyNone, // VK_7 XK_7 /* 0x37 */ kKeyNone, // VK_7
/* 0x38 */ kKeyNone, // VK_8 XK_8 /* 0x38 */ kKeyNone, // VK_8
/* 0x39 */ kKeyNone, // VK_9 XK_9 /* 0x39 */ kKeyNone, // VK_9
/* 0x3a */ kKeyNone, // undefined /* 0x3a */ kKeyNone, // undefined
/* 0x3b */ kKeyNone, // undefined /* 0x3b */ kKeyNone, // undefined
/* 0x3c */ kKeyNone, // undefined /* 0x3c */ kKeyNone, // undefined
@ -654,77 +654,77 @@ static const KeyID g_virtualKey[] =
/* 0x3e */ kKeyNone, // undefined /* 0x3e */ kKeyNone, // undefined
/* 0x3f */ kKeyNone, // undefined /* 0x3f */ kKeyNone, // undefined
/* 0x40 */ kKeyNone, // undefined /* 0x40 */ kKeyNone, // undefined
/* 0x41 */ kKeyNone, // VK_A XK_A /* 0x41 */ kKeyNone, // VK_A
/* 0x42 */ kKeyNone, // VK_B XK_B /* 0x42 */ kKeyNone, // VK_B
/* 0x43 */ kKeyNone, // VK_C XK_C /* 0x43 */ kKeyNone, // VK_C
/* 0x44 */ kKeyNone, // VK_D XK_D /* 0x44 */ kKeyNone, // VK_D
/* 0x45 */ kKeyNone, // VK_E XK_E /* 0x45 */ kKeyNone, // VK_E
/* 0x46 */ kKeyNone, // VK_F XK_F /* 0x46 */ kKeyNone, // VK_F
/* 0x47 */ kKeyNone, // VK_G XK_G /* 0x47 */ kKeyNone, // VK_G
/* 0x48 */ kKeyNone, // VK_H XK_H /* 0x48 */ kKeyNone, // VK_H
/* 0x49 */ kKeyNone, // VK_I XK_I /* 0x49 */ kKeyNone, // VK_I
/* 0x4a */ kKeyNone, // VK_J XK_J /* 0x4a */ kKeyNone, // VK_J
/* 0x4b */ kKeyNone, // VK_K XK_K /* 0x4b */ kKeyNone, // VK_K
/* 0x4c */ kKeyNone, // VK_L XK_L /* 0x4c */ kKeyNone, // VK_L
/* 0x4d */ kKeyNone, // VK_M XK_M /* 0x4d */ kKeyNone, // VK_M
/* 0x4e */ kKeyNone, // VK_N XK_N /* 0x4e */ kKeyNone, // VK_N
/* 0x4f */ kKeyNone, // VK_O XK_O /* 0x4f */ kKeyNone, // VK_O
/* 0x50 */ kKeyNone, // VK_P XK_P /* 0x50 */ kKeyNone, // VK_P
/* 0x51 */ kKeyNone, // VK_Q XK_Q /* 0x51 */ kKeyNone, // VK_Q
/* 0x52 */ kKeyNone, // VK_R XK_R /* 0x52 */ kKeyNone, // VK_R
/* 0x53 */ kKeyNone, // VK_S XK_S /* 0x53 */ kKeyNone, // VK_S
/* 0x54 */ kKeyNone, // VK_T XK_T /* 0x54 */ kKeyNone, // VK_T
/* 0x55 */ kKeyNone, // VK_U XK_U /* 0x55 */ kKeyNone, // VK_U
/* 0x56 */ kKeyNone, // VK_V XK_V /* 0x56 */ kKeyNone, // VK_V
/* 0x57 */ kKeyNone, // VK_W XK_W /* 0x57 */ kKeyNone, // VK_W
/* 0x58 */ kKeyNone, // VK_X XK_X /* 0x58 */ kKeyNone, // VK_X
/* 0x59 */ kKeyNone, // VK_Y XK_Y /* 0x59 */ kKeyNone, // VK_Y
/* 0x5a */ kKeyNone, // VK_Z XK_Z /* 0x5a */ kKeyNone, // VK_Z
/* 0x5b */ 0xffe7, // VK_LWIN XK_Meta_L /* 0x5b */ kKeyMeta_L, // VK_LWIN
/* 0x5c */ 0xffe8, // VK_RWIN XK_Meta_R /* 0x5c */ kKeyMeta_R, // VK_RWIN
/* 0x5d */ 0xff67, // VK_APPS XK_Menu /* 0x5d */ kKeyMenu, // VK_APPS
/* 0x5e */ kKeyNone, // undefined /* 0x5e */ kKeyNone, // undefined
/* 0x5f */ kKeyNone, // undefined /* 0x5f */ kKeyNone, // undefined
/* 0x60 */ 0xffb0, // VK_NUMPAD0 XK_KP_0 /* 0x60 */ kKeyKP_0, // VK_NUMPAD0
/* 0x61 */ 0xffb1, // VK_NUMPAD1 XK_KP_1 /* 0x61 */ kKeyKP_1, // VK_NUMPAD1
/* 0x62 */ 0xffb2, // VK_NUMPAD2 XK_KP_2 /* 0x62 */ kKeyKP_2, // VK_NUMPAD2
/* 0x63 */ 0xffb3, // VK_NUMPAD3 XK_KP_3 /* 0x63 */ kKeyKP_3, // VK_NUMPAD3
/* 0x64 */ 0xffb4, // VK_NUMPAD4 XK_KP_4 /* 0x64 */ kKeyKP_4, // VK_NUMPAD4
/* 0x65 */ 0xffb5, // VK_NUMPAD5 XK_KP_5 /* 0x65 */ kKeyKP_5, // VK_NUMPAD5
/* 0x66 */ 0xffb6, // VK_NUMPAD6 XK_KP_6 /* 0x66 */ kKeyKP_6, // VK_NUMPAD6
/* 0x67 */ 0xffb7, // VK_NUMPAD7 XK_KP_7 /* 0x67 */ kKeyKP_7, // VK_NUMPAD7
/* 0x68 */ 0xffb8, // VK_NUMPAD8 XK_KP_8 /* 0x68 */ kKeyKP_8, // VK_NUMPAD8
/* 0x69 */ 0xffb9, // VK_NUMPAD9 XK_KP_9 /* 0x69 */ kKeyKP_9, // VK_NUMPAD9
/* 0x6a */ 0xffaa, // VK_MULTIPLY XK_KP_Multiply /* 0x6a */ kKeyKP_Multiply, // VK_MULTIPLY
/* 0x6b */ 0xffab, // VK_ADD XK_KP_Add /* 0x6b */ kKeyKP_Add, // VK_ADD
/* 0x6c */ 0xffac, // VK_SEPARATOR XK_KP_Separator /* 0x6c */ kKeyKP_Separator,// VK_SEPARATOR
/* 0x6d */ 0xffad, // VK_SUBTRACT XK_KP_Subtract /* 0x6d */ kKeyKP_Subtract, // VK_SUBTRACT
/* 0x6e */ 0xffae, // VK_DECIMAL XK_KP_Decimal /* 0x6e */ kKeyKP_Decimal, // VK_DECIMAL
/* 0x6f */ 0xffaf, // VK_DIVIDE XK_KP_Divide /* 0x6f */ kKeyKP_Divide, // VK_DIVIDE
/* 0x70 */ 0xffbe, // VK_F1 XK_F1 /* 0x70 */ kKeyF1, // VK_F1
/* 0x71 */ 0xffbf, // VK_F2 XK_F2 /* 0x71 */ kKeyF2, // VK_F2
/* 0x72 */ 0xffc0, // VK_F3 XK_F3 /* 0x72 */ kKeyF3, // VK_F3
/* 0x73 */ 0xffc1, // VK_F4 XK_F4 /* 0x73 */ kKeyF4, // VK_F4
/* 0x74 */ 0xffc2, // VK_F5 XK_F5 /* 0x74 */ kKeyF5, // VK_F5
/* 0x75 */ 0xffc3, // VK_F6 XK_F6 /* 0x75 */ kKeyF6, // VK_F6
/* 0x76 */ 0xffc4, // VK_F7 XK_F7 /* 0x76 */ kKeyF7, // VK_F7
/* 0x77 */ 0xffc5, // VK_F8 XK_F8 /* 0x77 */ kKeyF8, // VK_F8
/* 0x78 */ 0xffc6, // VK_F9 XK_F9 /* 0x78 */ kKeyF9, // VK_F9
/* 0x79 */ 0xffc7, // VK_F10 XK_F10 /* 0x79 */ kKeyF10, // VK_F10
/* 0x7a */ 0xffc8, // VK_F11 XK_F11 /* 0x7a */ kKeyF11, // VK_F11
/* 0x7b */ 0xffc9, // VK_F12 XK_F12 /* 0x7b */ kKeyF12, // VK_F12
/* 0x7c */ 0xffca, // VK_F13 XK_F13 /* 0x7c */ kKeyF13, // VK_F13
/* 0x7d */ 0xffcb, // VK_F14 XK_F14 /* 0x7d */ kKeyF14, // VK_F14
/* 0x7e */ 0xffcc, // VK_F15 XK_F15 /* 0x7e */ kKeyF15, // VK_F15
/* 0x7f */ 0xffcd, // VK_F16 XK_F16 /* 0x7f */ kKeyF16, // VK_F16
/* 0x80 */ 0xffce, // VK_F17 XK_F17 /* 0x80 */ kKeyF17, // VK_F17
/* 0x81 */ 0xffcf, // VK_F18 XK_F18 /* 0x81 */ kKeyF18, // VK_F18
/* 0x82 */ 0xffd0, // VK_F19 XK_F19 /* 0x82 */ kKeyF19, // VK_F19
/* 0x83 */ 0xffd1, // VK_F20 XK_F20 /* 0x83 */ kKeyF20, // VK_F20
/* 0x84 */ 0xffd2, // VK_F21 XK_F21 /* 0x84 */ kKeyF21, // VK_F21
/* 0x85 */ 0xffd3, // VK_F22 XK_F22 /* 0x85 */ kKeyF22, // VK_F22
/* 0x86 */ 0xffd4, // VK_F23 XK_F23 /* 0x86 */ kKeyF23, // VK_F23
/* 0x87 */ 0xffd5, // VK_F24 XK_F24 /* 0x87 */ kKeyF24, // VK_F24
/* 0x88 */ kKeyNone, // unassigned /* 0x88 */ kKeyNone, // unassigned
/* 0x89 */ kKeyNone, // unassigned /* 0x89 */ kKeyNone, // unassigned
/* 0x8a */ kKeyNone, // unassigned /* 0x8a */ kKeyNone, // unassigned
@ -733,8 +733,8 @@ static const KeyID g_virtualKey[] =
/* 0x8d */ kKeyNone, // unassigned /* 0x8d */ kKeyNone, // unassigned
/* 0x8e */ kKeyNone, // unassigned /* 0x8e */ kKeyNone, // unassigned
/* 0x8f */ kKeyNone, // unassigned /* 0x8f */ kKeyNone, // unassigned
/* 0x90 */ 0xff7f, // VK_NUMLOCK XK_Num_Lock /* 0x90 */ kKeyNumLock, // VK_NUMLOCK
/* 0x91 */ 0xff14, // VK_SCROLL XK_Scroll_Lock /* 0x91 */ kKeyScrollLock, // VK_SCROLL
/* 0x92 */ kKeyNone, // unassigned /* 0x92 */ kKeyNone, // unassigned
/* 0x93 */ kKeyNone, // unassigned /* 0x93 */ kKeyNone, // unassigned
/* 0x94 */ kKeyNone, // unassigned /* 0x94 */ kKeyNone, // unassigned
@ -749,12 +749,12 @@ static const KeyID g_virtualKey[] =
/* 0x9d */ kKeyNone, // unassigned /* 0x9d */ kKeyNone, // unassigned
/* 0x9e */ kKeyNone, // unassigned /* 0x9e */ kKeyNone, // unassigned
/* 0x9f */ kKeyNone, // unassigned /* 0x9f */ kKeyNone, // unassigned
/* 0xa0 */ 0xffe1, // VK_LSHIFT XK_Shift_L /* 0xa0 */ kKeyShift_L, // VK_LSHIFT
/* 0xa1 */ 0xffe2, // VK_RSHIFT XK_Shift_R /* 0xa1 */ kKeyShift_R, // VK_RSHIFT
/* 0xa2 */ 0xffe3, // VK_LCONTROL XK_Control_L /* 0xa2 */ kKeyControl_L, // VK_LCONTROL
/* 0xa3 */ 0xffe4, // VK_RCONTROL XK_Control_R /* 0xa3 */ kKeyControl_R, // VK_RCONTROL
/* 0xa4 */ 0xffe9, // VK_LMENU XK_Alt_L /* 0xa4 */ kKeyAlt_L, // VK_LMENU
/* 0xa5 */ 0xffea, // VK_RMENU XK_Alt_R /* 0xa5 */ kKeyAlt_R, // VK_RMENU
/* 0xa6 */ kKeyNone, // unassigned /* 0xa6 */ kKeyNone, // unassigned
/* 0xa7 */ kKeyNone, // unassigned /* 0xa7 */ kKeyNone, // unassigned
/* 0xa8 */ kKeyNone, // unassigned /* 0xa8 */ kKeyNone, // unassigned
@ -859,8 +859,6 @@ CMSWindowsPrimaryScreen::mapKey(
// 95,98,NT4: num pad scan code -> bad vk code except // 95,98,NT4: num pad scan code -> bad vk code except
// SEPARATOR, MULTIPLY, SUBTRACT, ADD // SEPARATOR, MULTIPLY, SUBTRACT, ADD
static const KeyID XK_Multi_key = 0xff20;
assert(maskOut != NULL); assert(maskOut != NULL);
// map modifier key // map modifier key
@ -952,7 +950,7 @@ CMSWindowsPrimaryScreen::mapKey(
// check for dead keys // check for dead keys
if (MapVirtualKey(vkCode, 2) >= 0x8000) { if (MapVirtualKey(vkCode, 2) >= 0x8000) {
return XK_Multi_key; return kKeyMultiKey;
} }
// ToAscii() maps ctrl+letter to the corresponding control code // ToAscii() maps ctrl+letter to the corresponding control code
@ -968,6 +966,7 @@ CMSWindowsPrimaryScreen::mapKey(
m_keys[VK_CONTROL] = 0; m_keys[VK_CONTROL] = 0;
// convert to ascii // convert to ascii
// FIXME -- support unicode
WORD ascii; WORD ascii;
int result = ToAscii(vkCode, scanCode, m_keys, &ascii, 0); int result = ToAscii(vkCode, scanCode, m_keys, &ascii, 0);
@ -981,7 +980,7 @@ CMSWindowsPrimaryScreen::mapKey(
// by calling ToAscii() again with arbitrary arguments. // by calling ToAscii() again with arbitrary arguments.
if (result < 0) { if (result < 0) {
ToAscii(vkCode, scanCode, m_keys, &ascii, 0); ToAscii(vkCode, scanCode, m_keys, &ascii, 0);
return XK_Multi_key; return kKeyMultiKey;
} }
// if result is 1 then the key was succesfully converted // if result is 1 then the key was succesfully converted
@ -1017,7 +1016,7 @@ CMSWindowsPrimaryScreen::mapKey(
// put it back // put it back
ToAscii(vkCode, scanCode, keys, &ascii, 0); ToAscii(vkCode, scanCode, keys, &ascii, 0);
return XK_Multi_key; return kKeyMultiKey;
} }
// cannot convert key // cannot convert key

View File

@ -40,6 +40,9 @@ static const KeyID kKeySysReq = 0xEF15;
static const KeyID kKeyEscape = 0xEF1B; static const KeyID kKeyEscape = 0xEF1B;
static const KeyID kKeyDelete = 0xEFFF; /* Delete, rubout */ static const KeyID kKeyDelete = 0xEFFF; /* Delete, rubout */
// multi-key character composition
static const KeyID kKeyMultiKey = 0xEF20; /* Multi-key character compose */
// cursor control // cursor control
static const KeyID kKeyHome = 0xEF50; static const KeyID kKeyHome = 0xEF50;
static const KeyID kKeyLeft = 0xEF51; /* Move left, left arrow */ static const KeyID kKeyLeft = 0xEF51; /* Move left, left arrow */