+++ /dev/null
-Index: new/ui/vnc.c
-===================================================================
---- new.orig/ui/vnc.c 2014-11-20 06:45:06.000000000 +0100
-+++ new/ui/vnc.c 2014-11-20 06:50:51.000000000 +0100
-@@ -1633,6 +1633,10 @@
-
- static void do_key_event(VncState *vs, int down, int keycode, int sym)
- {
-+ int mods = keycode & 0xf00;
-+
-+ keycode &= SCANCODE_KEYMASK;
-+
- /* QEMU console switch */
- switch(keycode) {
- case 0x2a: /* Left Shift */
-@@ -1712,7 +1716,24 @@
- }
-
- if (qemu_console_is_graphic(NULL)) {
-+
-+ /* our java vnc client never sends ALTGR, so we create
-+ an artificial up/down event */
-+
-+ int emul_altgr = (mods & SCANCODE_ALTGR) &&
-+ !vs->modifiers_state[0xb8];
-+
-+ if (emul_altgr) {
-+ reset_keys(vs);
-+ qemu_input_event_send_key_number(vs->vd->dcl.con, 0xb8, true);
-+ }
-+
- qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, down);
-+
-+ if (emul_altgr) {
-+ qemu_input_event_send_key_number(vs->vd->dcl.con, 0xb8, false);
-+ }
-+
- } else {
- bool numlock = vs->modifiers_state[0x45];
- bool control = (vs->modifiers_state[0x1d] ||
-@@ -1851,7 +1872,8 @@
- lsym = lsym - 'A' + 'a';
- }
-
-- keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF) & SCANCODE_KEYMASK;
-+ keycode = keysym2scancode(vs->vd->kbd_layout, lsym & 0xFFFF);
-+
- trace_vnc_key_event_map(down, sym, keycode, code2name(keycode));
- do_key_event(vs, down, keycode, sym);
- }