vnc: improve numpad support for qemu console.
Reorganize qemu console emulation code. Make it look at the numlock state and interpret numpad keys as arrow+friends (numlock off) or digits (numlock on). While being at it also wind up the other numpad keys. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
5c5dafdc5e
commit
bb0a18e110
61
vnc.c
61
vnc.c
@ -1361,6 +1361,7 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
|
||||
} else {
|
||||
/* QEMU console emulation */
|
||||
if (down) {
|
||||
int numlock = vs->modifiers_state[0x45];
|
||||
switch (keycode) {
|
||||
case 0x2a: /* Left Shift */
|
||||
case 0x36: /* Right Shift */
|
||||
@ -1370,41 +1371,83 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
|
||||
case 0xb8: /* Right ALT */
|
||||
break;
|
||||
case 0xc8:
|
||||
case 0x48:
|
||||
kbd_put_keysym(QEMU_KEY_UP);
|
||||
break;
|
||||
case 0xd0:
|
||||
case 0x50:
|
||||
kbd_put_keysym(QEMU_KEY_DOWN);
|
||||
break;
|
||||
case 0xcb:
|
||||
case 0x4b:
|
||||
kbd_put_keysym(QEMU_KEY_LEFT);
|
||||
break;
|
||||
case 0xcd:
|
||||
case 0x4d:
|
||||
kbd_put_keysym(QEMU_KEY_RIGHT);
|
||||
break;
|
||||
case 0xd3:
|
||||
case 0x53:
|
||||
kbd_put_keysym(QEMU_KEY_DELETE);
|
||||
break;
|
||||
case 0xc7:
|
||||
case 0x47:
|
||||
kbd_put_keysym(QEMU_KEY_HOME);
|
||||
break;
|
||||
case 0xcf:
|
||||
case 0x4f:
|
||||
kbd_put_keysym(QEMU_KEY_END);
|
||||
break;
|
||||
case 0xc9:
|
||||
case 0x49:
|
||||
kbd_put_keysym(QEMU_KEY_PAGEUP);
|
||||
break;
|
||||
case 0xd1:
|
||||
case 0x51:
|
||||
kbd_put_keysym(QEMU_KEY_PAGEDOWN);
|
||||
break;
|
||||
|
||||
case 0x47:
|
||||
kbd_put_keysym(numlock ? '7' : QEMU_KEY_HOME);
|
||||
break;
|
||||
case 0x48:
|
||||
kbd_put_keysym(numlock ? '8' : QEMU_KEY_UP);
|
||||
break;
|
||||
case 0x49:
|
||||
kbd_put_keysym(numlock ? '9' : QEMU_KEY_PAGEUP);
|
||||
break;
|
||||
case 0x4b:
|
||||
kbd_put_keysym(numlock ? '4' : QEMU_KEY_LEFT);
|
||||
break;
|
||||
case 0x4c:
|
||||
kbd_put_keysym('5');
|
||||
break;
|
||||
case 0x4d:
|
||||
kbd_put_keysym(numlock ? '6' : QEMU_KEY_RIGHT);
|
||||
break;
|
||||
case 0x4f:
|
||||
kbd_put_keysym(numlock ? '1' : QEMU_KEY_END);
|
||||
break;
|
||||
case 0x50:
|
||||
kbd_put_keysym(numlock ? '2' : QEMU_KEY_DOWN);
|
||||
break;
|
||||
case 0x51:
|
||||
kbd_put_keysym(numlock ? '3' : QEMU_KEY_PAGEDOWN);
|
||||
break;
|
||||
case 0x52:
|
||||
kbd_put_keysym('0');
|
||||
break;
|
||||
case 0x53:
|
||||
kbd_put_keysym(numlock ? '.' : QEMU_KEY_DELETE);
|
||||
break;
|
||||
|
||||
case 0xb5:
|
||||
kbd_put_keysym('/');
|
||||
break;
|
||||
case 0x37:
|
||||
kbd_put_keysym('*');
|
||||
break;
|
||||
case 0x4a:
|
||||
kbd_put_keysym('-');
|
||||
break;
|
||||
case 0x4e:
|
||||
kbd_put_keysym('+');
|
||||
break;
|
||||
case 0x9c:
|
||||
kbd_put_keysym('\n');
|
||||
break;
|
||||
|
||||
default:
|
||||
kbd_put_keysym(sym);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user