From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FaZlX-00007M-8b for qemu-devel@nongnu.org; Mon, 01 May 2006 10:52:47 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FaZlV-0008VF-Ai for qemu-devel@nongnu.org; Mon, 01 May 2006 10:52:46 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FaZlV-0008Ul-12 for qemu-devel@nongnu.org; Mon, 01 May 2006 10:52:45 -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 1FaZpK-00044y-De for qemu-devel@nongnu.org; Mon, 01 May 2006 10:56:42 -0400 Message-ID: <445620B7.4010407@codemonkey.ws> Date: Mon, 01 May 2006 09:52:39 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <44558B4C.6080804@codemonkey.ws> <4455E739.90300@bellard.org> In-Reply-To: <4455E739.90300@bellard.org> Content-Type: multipart/mixed; boundary="------------030707070804050501000005" Subject: [Qemu-devel] Re: [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: Fabrice Bellard Cc: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------030707070804050501000005 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Fabrice Bellard wrote: > Does it mean that the caps lock keysym is not transmitted by RealVNC ? > Otherwise converting the upper case to case lower case would suffice. You're right. New patch attached. Regards, Anthony Liguori > Fabrice. > > Anthony Liguori wrote: >> The spec isn't really clear about what a client should do. This >> patch is needed for RealVNC clients (at least). >> >> Regards, >> >> Anthony Liguori >> >> >> ------------------------------------------------------------------------ >> >> # 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, > --------------030707070804050501000005 Content-Type: text/plain; name="qemu-vnc-upper2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="qemu-vnc-upper2.diff" # HG changeset patch # User Anthony Liguori # Node ID a2d60c56904d3e2c08d628461c04b149c74b62cb # Parent c0fedc4f4e9c870fa2ececc1144596c73e9e475e Fix uppercase characters diff -r c0fedc4f4e9c -r a2d60c56904d vnc.c --- a/vnc.c Mon May 01 18:58:07 2006 +0000 +++ b/vnc.c Mon May 01 09:51:32 2006 -0500 @@ -591,7 +591,7 @@ static void pointer_event(VncState *vs, } } -static void key_event(VncState *vs, int down, uint32_t sym) +static void do_key_event(VncState *vs, int down, uint32_t sym) { int keycode; @@ -603,6 +603,13 @@ 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'; + do_key_event(vs, down, sym); } static void framebuffer_update_request(VncState *vs, int incremental, --------------030707070804050501000005--