From e26437c2d4a7f6cbbc0bbd51b08a2dcce84bb93b Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 8 Nov 2011 10:02:16 +0100 Subject: [PATCH] vnc: fix ctrl key in vnc terminal emulation 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 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index 5752bf8740..810582b13a 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; } }