2 ===================================================================
3 --- new.orig/ui/vnc.c 2012-03-12 06:44:56.000000000 +0100
4 +++ new/ui/vnc.c 2012-03-13 07:25:34.000000000 +0100
7 static void do_key_event(VncState *vs, int down, int keycode, int sym)
9 + int mods = keycode & 0xf00;
11 + keycode &= SCANCODE_KEYMASK;
13 /* QEMU console switch */
15 case 0x2a: /* Left Shift */
16 @@ -1571,12 +1575,42 @@
19 if (is_graphic_console()) {
21 + /* our java vnc client never sends ALTGR, so we create
22 + an artificial up/down event */
24 + int emul_altgr = (mods & SCANCODE_ALTGR) &&
25 + !vs->modifiers_state[0xb8];
29 + kbd_put_keycode(SCANCODE_EMUL0);
30 + kbd_put_keycode(0xb8 & SCANCODE_KEYCODEMASK);
33 + int emul_shift = (mods & SCANCODE_SHIFT) &&
34 + !vs->modifiers_state[0x2a];
37 + kbd_put_keycode(0x2a & SCANCODE_KEYCODEMASK);
40 if (keycode & SCANCODE_GREY)
41 kbd_put_keycode(SCANCODE_EMUL0);
43 kbd_put_keycode(keycode & SCANCODE_KEYCODEMASK);
45 kbd_put_keycode(keycode | SCANCODE_UP);
48 + kbd_put_keycode(0x2a | SCANCODE_UP);
52 + kbd_put_keycode(SCANCODE_EMUL0);
53 + kbd_put_keycode(0xb8 | SCANCODE_UP);
57 bool numlock = vs->modifiers_state[0x45];
58 bool control = (vs->modifiers_state[0x1d] ||
60 lsym = lsym - 'A' + 'a';
63 - keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF) & SCANCODE_KEYMASK;
64 + keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF);
66 do_key_event(vs, down, keycode, sym);