From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MEge2-0000TY-5b for qemu-devel@nongnu.org; Thu, 11 Jun 2009 05:32:26 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MEgdx-0000TC-FW for qemu-devel@nongnu.org; Thu, 11 Jun 2009 05:32:25 -0400 Received: from [199.232.76.173] (port=55187 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MEgdx-0000T9-8U for qemu-devel@nongnu.org; Thu, 11 Jun 2009 05:32:21 -0400 Received: from mx2.redhat.com ([66.187.237.31]:50585) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MEgdw-0007Tp-Oe for qemu-devel@nongnu.org; Thu, 11 Jun 2009 05:32:21 -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 n5B9WKUc023155 for ; Thu, 11 Jun 2009 05:32:20 -0400 From: Gerd Hoffmann Date: Thu, 11 Jun 2009 11:32:14 +0200 Message-Id: <1244712734-14345-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1244712734-14345-1-git-send-email-kraxel@redhat.com> References: <1244712734-14345-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH RESEND 1/1] 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 dbbeb14..22dc96d 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