From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FaPog-0008T5-L4 for qemu-devel@nongnu.org; Mon, 01 May 2006 00:15:22 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FaPoe-0008Qd-QK for qemu-devel@nongnu.org; Mon, 01 May 2006 00:15:21 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FaPoe-0008QK-Ka for qemu-devel@nongnu.org; Mon, 01 May 2006 00:15:20 -0400 Received: from [70.116.9.243] (helo=localhost.localdomain) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1FaPsN-0004AS-P6 for qemu-devel@nongnu.org; Mon, 01 May 2006 00:19:12 -0400 Message-ID: <44558B4C.6080804@codemonkey.ws> Date: Sun, 30 Apr 2006 23:15:08 -0500 From: Anthony Liguori MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090305000405030400030603" Subject: [Qemu-devel] [PATCH] Work around VNC clients that do not transmit shifts for uppercase characters Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------090305000405030400030603 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit The spec isn't really clear about what a client should do. This patch is needed for RealVNC clients (at least). Regards, Anthony Liguori --------------090305000405030400030603 Content-Type: text/plain; name="qemu-vnc-upper.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="qemu-vnc-upper.diff" # HG changeset patch # User Anthony Liguori # Node ID 8a71740fc36fcaf97e126e581847983cb2a4324d # Parent a9314fc39a5e3d78d80d385f560c922c3ce0e82b Fix for VNC clients that do not send Shift's for uppercase characters diff -r a9314fc39a5e -r 8a71740fc36f vnc.c --- a/vnc.c Sun Apr 30 19:04:17 2006 -0500 +++ b/vnc.c Sun Apr 30 23:12:48 2006 -0500 @@ -591,11 +591,11 @@ static void pointer_event(VncState *vs, } } -static void key_event(VncState *vs, int down, uint32_t sym) +static void key_event_post(kbd_layout_t *kbd_layout, int down, uint32_t sym) { int keycode; - keycode = keysym2scancode(vs->kbd_layout, sym & 0xFFFF); + keycode = keysym2scancode(kbd_layout, sym & 0xFFFF); if (keycode & 0x80) kbd_put_keycode(0xe0); @@ -603,6 +603,22 @@ static void key_event(VncState *vs, int kbd_put_keycode(keycode & 0x7f); else kbd_put_keycode(keycode | 0x80); +} + +static void key_event(VncState *vs, int down, uint32_t sym) +{ + + if (sym >= 'A' && sym <= 'Z') { + sym = (sym - 'A') + 'a'; + if (down) { + key_event_post(vs->kbd_layout, 1, 0xffe1); + key_event_post(vs->kbd_layout, 1, sym); + key_event_post(vs->kbd_layout, 0, 0xffe1); + return; + } + } + + key_event_post(vs->kbd_layout, down, sym); } static void framebuffer_update_request(VncState *vs, int incremental, --------------090305000405030400030603--