From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47248) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtLeG-0005td-GS for qemu-devel@nongnu.org; Wed, 18 Dec 2013 13:15:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VtLeA-0008H9-V0 for qemu-devel@nongnu.org; Wed, 18 Dec 2013 13:15:08 -0500 Received: from [2a03:4000:1::4e2f:c7ac:d] (port=47224 helo=v220110690675601.yourvserver.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtLeA-0008Bo-Mt for qemu-devel@nongnu.org; Wed, 18 Dec 2013 13:15:02 -0500 Message-ID: <52B1E618.4000305@weilnetz.de> Date: Wed, 18 Dec 2013 19:14:48 +0100 From: Stefan Weil MIME-Version: 1.0 References: <1386429917-7629-1-git-send-email-sw@weilnetz.de> In-Reply-To: <1386429917-7629-1-git-send-email-sw@weilnetz.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] gtk: Support keyboard translation for hosts running Windows List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel Cc: Anthony Liguori Am 07.12.2013 16:25, schrieb Stefan Weil: > 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"); Ping? Should I send a MinGW pull request for this patch?