mirror of https://github.com/xqemu/xqemu.git
gtk: Support keyboard translation for hosts running Windows
GTK uses different hardware keycodes on Windows hosts, so some special handling is needed to get the QEMU keycode. Signed-off-by: Stefan Weil <sw@weilnetz.de>
This commit is contained in:
parent
1cf892ca26
commit
2777ccc55b
18
ui/gtk.c
18
ui/gtk.c
|
@ -34,6 +34,10 @@
|
||||||
#define GETTEXT_PACKAGE "qemu"
|
#define GETTEXT_PACKAGE "qemu"
|
||||||
#define LOCALEDIR "po"
|
#define LOCALEDIR "po"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# define _WIN32_WINNT 0x0601 /* needed to get definition of MAPVK_VK_TO_VSC */
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
|
|
||||||
#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
|
#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)
|
static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
|
||||||
{
|
{
|
||||||
GtkDisplayState *s = opaque;
|
GtkDisplayState *s = opaque;
|
||||||
int gdk_keycode;
|
int gdk_keycode = key->hardware_keycode;
|
||||||
int qemu_keycode;
|
|
||||||
int i;
|
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) {
|
if (gdk_keycode < 9) {
|
||||||
qemu_keycode = 0;
|
qemu_keycode = 0;
|
||||||
|
@ -723,6 +734,7 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
|
||||||
} else {
|
} else {
|
||||||
qemu_keycode = 0;
|
qemu_keycode = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
trace_gd_key_event(gdk_keycode, qemu_keycode,
|
trace_gd_key_event(gdk_keycode, qemu_keycode,
|
||||||
(key->type == GDK_KEY_PRESS) ? "down" : "up");
|
(key->type == GDK_KEY_PRESS) ? "down" : "up");
|
||||||
|
|
Loading…
Reference in New Issue