From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Daniel P. Berrange" Subject: [PATCH] Enable uppercase letters to be entered in QEMU monitor terminal Date: Tue, 28 Nov 2006 22:50:47 +0000 Message-ID: <20061128225047.GL24746@redhat.com> Reply-To: "Daniel P. Berrange" Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="RnlQjJ0d97Da+TV1" Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Changeset 10742:3e07ec30c445 made it possible to switch to the QEMU monitor terminal when using the VNC display protocol. Unfortunately the VNC key handling is rather crazy, so even if you have the shift key pressed, a VNC client will send a lowercase letter, expecting the server to interpret the state of the shift key as desired. Normally in HVM guests, the guest OS does this interpretation just fine, but if you switch to the monitor terminal (Ctrl+Alt+2) then the guest OS is not involved. The end result: it is impossible to type any uppercase letters in the monitor - which makes it hard to type in file paths for example. In the spirit of the original patch in changeset 10742, the attached patch is the simplest solution to make shift keys work - it tracks the shift key and caps lock key state. If both are active, or both inactive, then no transform is made; If either one, or the other (but not both) are active, then the letters a-z are transformed to A-Z, and vica-verca. A real long term solution would be to somehow get the monitor to use the proper keymap tables like the SDL display does, but that's something which should really be done upstream rather than as a Xen patch since it would be a rather large amount of work. Signed-off-by: Daniel P. Berrange Regards, Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=| --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="xen-qemu-vnc-monitor-shift.patch" diff -r 7826e5482d42 tools/ioemu/vnc.c --- a/tools/ioemu/vnc.c Tue Nov 28 14:27:13 2006 +0000 +++ b/tools/ioemu/vnc.c Tue Nov 28 17:51:08 2006 -0500 @@ -114,6 +114,7 @@ struct VncState int visible_h; int ctl_keys; /* Ctrl+Alt starts calibration */ + int shift_keys; /* Shift / CapsLock keys */ }; #define DIRTY_PIXEL_BITS 64 @@ -442,7 +443,6 @@ static void vnc_copy(DisplayState *ds, i } else framebuffer_set_updated(vs, dst_x, dst_y, w, h); } - static int find_update_height(VncState *vs, int y, int maxy, int last_x, int x) { int h; @@ -870,9 +870,15 @@ static void do_key_event(VncState *vs, i } else if (down) { int qemu_keysym = 0; - if (sym <= 128) /* normal ascii */ - qemu_keysym = sym; - else { + if (sym <= 128) { /* normal ascii */ + int shifted = vs->shift_keys == 1 || vs->shift_keys == 2; + if (sym >= 'a' && sym <= 'z' && shifted) + qemu_keysym = sym + ('A' - 'a'); + else if (sym >= 'A' && sym <= 'Z' && !shifted) + qemu_keysym = sym - ('A' - 'a'); + else + qemu_keysym = sym; + } else { switch (sym) { case XK_Up: qemu_keysym = QEMU_KEY_UP; break; case XK_Down: qemu_keysym = QEMU_KEY_DOWN; break; @@ -903,6 +909,10 @@ static void do_key_event(VncState *vs, i vs->ctl_keys |= 2; break; + case XK_Shift_L: + vs->shift_keys |= 1; + break; + default: break; } @@ -914,6 +924,17 @@ static void do_key_event(VncState *vs, i case XK_Alt_L: vs->ctl_keys &= ~2; + break; + + case XK_Shift_L: + vs->shift_keys &= ~1; + break; + + case XK_Caps_Lock: + if (vs->shift_keys & 2) + vs->shift_keys &= ~2; + else + vs->shift_keys |= 2; break; case XK_1 ... XK_9: --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --RnlQjJ0d97Da+TV1--