@@ -901,7 +901,21 @@ static int gd_map_keycode(GtkDisplayState *s, GdkDisplay *dpy, int gdk_keycode)
#ifdef GDK_WINDOWING_WIN32
if (GDK_IS_WIN32_DISPLAY(dpy)) {
qemu_keycode = MapVirtualKey(gdk_keycode, MAPVK_VK_TO_VSC);
+ /*
+ * MapVirtualKey maps same code for left and right ctrl and alt keys.
+ * Following switch disambiguates the left and right codes.
+ */
switch (qemu_keycode) {
+ case 0x1d: /* L-ctrl */
+ if (gdk_keycode == VK_RCONTROL) {
+ qemu_keycode |= SCANCODE_GREY;
+ }
+ break;
+ case 0x38: /* L-alt */
+ if (gdk_keycode == VK_RMENU) {
+ qemu_keycode |= SCANCODE_GREY;
+ }
+ break;
case 103: /* alt gr */
qemu_keycode = 56 | SCANCODE_GREY;
break;