diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2009-06-11 11:32:14 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-06-16 15:18:39 -0500 |
commit | bb0a18e11056c3b8c32e65b97340ca8ae84ba855 (patch) | |
tree | 4ebdbe4e9fdc802dc36e4e7993010ceaac61243b | |
parent | 5c5dafdc5ecb2fd5080189e9ea4adcfa4e03ad5d (diff) |
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>
-rw-r--r-- | vnc.c | 61 |
1 files changed, 52 insertions, 9 deletions
@@ -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; |