[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] gtk: Support keyboard translation for hosts run
From: |
Stefan Weil |
Subject: |
Re: [Qemu-devel] [PATCH] gtk: Support keyboard translation for hosts running Windows |
Date: |
Wed, 18 Dec 2013 19:14:48 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 |
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 <address@hidden>
> ---
> 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?