From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50596) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W5Kjd-0007Ue-QK for qemu-devel@nongnu.org; Mon, 20 Jan 2014 14:42:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W5Kjd-0008AJ-0G for qemu-devel@nongnu.org; Mon, 20 Jan 2014 14:42:13 -0500 Received: from qemu.weilnetz.de ([2a03:4000:2:362::1]:53953 helo=v2201305906712890.yourvserver.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W5Kjc-0008AD-QG for qemu-devel@nongnu.org; Mon, 20 Jan 2014 14:42:12 -0500 From: Stefan Weil Date: Mon, 20 Jan 2014 20:41:49 +0100 Message-Id: <1390246909-18757-2-git-send-email-sw@weilnetz.de> In-Reply-To: <1390246909-18757-1-git-send-email-sw@weilnetz.de> References: <1390246909-18757-1-git-send-email-sw@weilnetz.de> Subject: [Qemu-devel] [PULL 1/1] gtk: Support keyboard translation for hosts running Windows List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Stefan Weil , qemu-devel@nongnu.org GTK uses different hardware keycodes on Windows hosts, so some special handling is needed to get the QEMU keycode. Signed-off-by: Stefan Weil --- ui/gtk.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 6316f5b..a633d89 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -34,6 +34,10 @@ #define GETTEXT_PACKAGE "qemu" #define LOCALEDIR "po" +#ifdef _WIN32 +# define _WIN32_WINNT 0x0601 /* needed to get definition of MAPVK_VK_TO_VSC */ +#endif + #include "qemu-common.h" #ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE @@ -704,11 +708,18 @@ static gboolean gd_button_event(GtkWidget *widget, GdkEventButton *button, static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque) { GtkDisplayState *s = opaque; - int gdk_keycode; - int qemu_keycode; + int gdk_keycode = key->hardware_keycode; int i; - gdk_keycode = key->hardware_keycode; +#ifdef _WIN32 + UINT qemu_keycode = MapVirtualKey(gdk_keycode, MAPVK_VK_TO_VSC); + switch (qemu_keycode) { + case 103: /* alt gr */ + qemu_keycode = 56 | SCANCODE_GREY; + break; + } +#else + int qemu_keycode; if (gdk_keycode < 9) { qemu_keycode = 0; @@ -723,6 +734,7 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque) } else { qemu_keycode = 0; } +#endif trace_gd_key_event(gdk_keycode, qemu_keycode, (key->type == GDK_KEY_PRESS) ? "down" : "up"); -- 1.7.10.4