Wire up the keyboard hooking code on Windows to fix the AltGr key and improve keyboard grabbing.
Signed-off-by: Volker Rümelin <vr_q...@t-online.de> --- ui/sdl2.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ui/sdl2.c b/ui/sdl2.c index 3c9424eb42..ec1cb8131f 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -30,6 +30,9 @@ #include "ui/sdl2.h" #include "sysemu/runstate.h" #include "sysemu/sysemu.h" +#ifdef CONFIG_WIN32 +#include "win32-kbd-hook.h" +#endif static int sdl2_num_outputs; static struct sdl2_console *sdl2_console; @@ -220,6 +223,9 @@ static void sdl_grab_start(struct sdl2_console *scon) } SDL_SetWindowGrab(scon->real_window, SDL_TRUE); gui_grab = 1; +#ifdef CONFIG_WIN32 + win32_kbd_set_grab(true); +#endif sdl_update_caption(scon); } @@ -227,6 +233,9 @@ static void sdl_grab_end(struct sdl2_console *scon) { SDL_SetWindowGrab(scon->real_window, SDL_FALSE); gui_grab = 0; +#ifdef CONFIG_WIN32 + win32_kbd_set_grab(false); +#endif sdl_show_cursor(scon); sdl_update_caption(scon); } @@ -532,6 +541,18 @@ static void handle_windowevent(SDL_Event *ev) sdl2_redraw(scon); break; case SDL_WINDOWEVENT_FOCUS_GAINED: +#ifdef CONFIG_WIN32 + if (qemu_console_is_graphic(scon->dcl.con)) { + SDL_SysWMinfo info; + + SDL_VERSION(&info.version); + if (SDL_GetWindowWMInfo(scon->real_window, &info)) { + win32_kbd_set_grab(gui_grab); + win32_kbd_set_window(info.info.win.window); + } + } +#endif + /* fall through */ case SDL_WINDOWEVENT_ENTER: if (!gui_grab && (qemu_input_is_absolute() || absolute_enabled)) { absolute_mouse_grab(scon); @@ -546,6 +567,11 @@ static void handle_windowevent(SDL_Event *ev) scon->ignore_hotkeys = get_mod_state(); break; case SDL_WINDOWEVENT_FOCUS_LOST: +#ifdef CONFIG_WIN32 + if (qemu_console_is_graphic(scon->dcl.con)) { + win32_kbd_set_window(NULL); + } +#endif if (gui_grab && !gui_fullscreen) { sdl_grab_end(scon); } -- 2.26.1