From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MBlui-0005AJ-IR for qemu-devel@nongnu.org; Wed, 03 Jun 2009 04:33:36 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MBlud-00059X-FT for qemu-devel@nongnu.org; Wed, 03 Jun 2009 04:33:35 -0400 Received: from [199.232.76.173] (port=43513 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MBlud-00059R-6j for qemu-devel@nongnu.org; Wed, 03 Jun 2009 04:33:31 -0400 Received: from mx2.redhat.com ([66.187.237.31]:37029) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MBluc-0005Z5-C7 for qemu-devel@nongnu.org; Wed, 03 Jun 2009 04:33:30 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n538XSfa018481 for ; Wed, 3 Jun 2009 04:33:28 -0400 From: Gerd Hoffmann Date: Wed, 3 Jun 2009 10:33:24 +0200 Message-Id: <1244018004-6145-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH] vnc: improve numpad support for qemu console. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann 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 --- vnc.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 52 insertions(+), 9 deletions(-) diff --git a/vnc.c b/vnc.c index 3f5d622..c6c049f 100644 --- a/vnc.c +++ b/vnc.c @@ -1333,6 +1333,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 */ @@ -1342,41 +1343,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; -- 1.6.2.2