# 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,