From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:56707) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTtBt-00067G-6d for qemu-devel@nongnu.org; Fri, 25 Nov 2011 05:39:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RTtBs-0005dR-3Q for qemu-devel@nongnu.org; Fri, 25 Nov 2011 05:39:33 -0500 Received: from mx1.redhat.com ([209.132.183.28]:64710) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTtBr-0005dF-SE for qemu-devel@nongnu.org; Fri, 25 Nov 2011 05:39:32 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pAPAdTMl028455 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 25 Nov 2011 05:39:30 -0500 From: Gerd Hoffmann Date: Fri, 25 Nov 2011 11:39:26 +0100 Message-Id: <1322217567-29291-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH] vnc: fix ctrl key in vnc terminal emulation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann Make the control keys for terminals on the vnc display (i.e. qemu -vnc :0 -serial vc) work. Makes the terminals alot more usable as typing Ctrl-C in your serial console actually has the desired effect ;) Signed-off-by: Gerd Hoffmann --- ui/vnc.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index 16c0404..62d32d5 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -1552,9 +1552,11 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym) else kbd_put_keycode(keycode | SCANCODE_UP); } else { + bool numlock = vs->modifiers_state[0x45]; + bool control = (vs->modifiers_state[0x1d] || + vs->modifiers_state[0x9d]); /* QEMU console emulation */ if (down) { - int numlock = vs->modifiers_state[0x45]; switch (keycode) { case 0x2a: /* Left Shift */ case 0x36: /* Right Shift */ @@ -1642,7 +1644,11 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym) break; default: - kbd_put_keysym(sym); + if (control) { + kbd_put_keysym(sym & 0x1f); + } else { + kbd_put_keysym(sym); + } break; } } -- 1.7.1