Am 12. Januar 2025 13:08:03 UTC schrieb Bernhard Beschow <shen...@gmail.com>: > > >Am 31. Dezember 2024 11:59:50 UTC schrieb "Volker RĂ¼melin" ><vr_q...@t-online.de>: >>Windows only: >> >>The libSDL2 Windows message loop needs the libSDL2 Windows low >>level keyboard hook procedure to grab the left and right Windows >>keys correctly. Reenable the SDL2 Windows keyboard hook procedure. >> >>Since SDL2 2.30.4 the SDL2 keyboard hook procedure also filters >>out the special left Control key event for every Alt Gr key event >>on keyboards with an international layout. This means the QEMU low >>level keyboard hook procedure is no longer needed. Remove the QEMU >>Windows keyboard hook procedure. >> >>Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2139 >>Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2323 >>Signed-off-by: Volker RĂ¼melin <vr_q...@t-online.de> > >Resolving bugs strictly by removing code. Nice! > >Issuing Meta+E opens a file manager in a guest running on Win11/msys2 host. >Thus: > >Tested-by: Bernhard Beschow <shen...@gmail.com> >Reviewed-by: Bernhard Beschow <shen...@gmail.com> Ping > >>--- >> >>v2: Remove the QEMU lowlevel keyboard hook procedure from the >>SDL2 UI backend. >> >>v3: Rebase to current master because of a merge conflict. >> >> ui/meson.build | 4 ---- >> ui/sdl2.c | 26 -------------------------- >> 2 files changed, 30 deletions(-) >> >>diff --git a/ui/meson.build b/ui/meson.build >>index 28c7381dd1..35fb04cadf 100644 >>--- a/ui/meson.build >>+++ b/ui/meson.build >>@@ -120,10 +120,6 @@ if gtk.found() >> endif >> >> if sdl.found() >>- if host_os == 'windows' >>- system_ss.add(files('win32-kbd-hook.c')) >>- endif >>- >> sdl_ss = ss.source_set() >> sdl_ss.add(sdl, sdl_image, pixman, glib, files( >> 'sdl2-2d.c', >>diff --git a/ui/sdl2.c b/ui/sdl2.c >>index 1fb72f67a6..2cb95a6b7c 100644 >>--- a/ui/sdl2.c >>+++ b/ui/sdl2.c >>@@ -32,7 +32,6 @@ >> #include "system/runstate.h" >> #include "system/runstate-action.h" >> #include "system/system.h" >>-#include "ui/win32-kbd-hook.h" >> #include "qemu/log.h" >> >> static int sdl2_num_outputs; >>@@ -262,7 +261,6 @@ static void sdl_grab_start(struct sdl2_console *scon) >> } >> SDL_SetWindowGrab(scon->real_window, SDL_TRUE); >> gui_grab = 1; >>- win32_kbd_set_grab(true); >> sdl_update_caption(scon); >> } >> >>@@ -270,7 +268,6 @@ static void sdl_grab_end(struct sdl2_console *scon) >> { >> SDL_SetWindowGrab(scon->real_window, SDL_FALSE); >> gui_grab = 0; >>- win32_kbd_set_grab(false); >> sdl_show_cursor(scon); >> sdl_update_caption(scon); >> } >>@@ -371,19 +368,6 @@ static int get_mod_state(void) >> } >> } >> >>-static void *sdl2_win32_get_hwnd(struct sdl2_console *scon) >>-{ >>-#ifdef CONFIG_WIN32 >>- SDL_SysWMinfo info; >>- >>- SDL_VERSION(&info.version); >>- if (SDL_GetWindowWMInfo(scon->real_window, &info)) { >>- return info.info.win.window; >>- } >>-#endif >>- return NULL; >>-} >>- >> static void handle_keydown(SDL_Event *ev) >> { >> int win; >>@@ -608,10 +592,6 @@ static void handle_windowevent(SDL_Event *ev) >> sdl2_redraw(scon); >> break; >> case SDL_WINDOWEVENT_FOCUS_GAINED: >>- win32_kbd_set_grab(gui_grab); >>- if (qemu_console_is_graphic(scon->dcl.con)) { >>- win32_kbd_set_window(sdl2_win32_get_hwnd(scon)); >>- } >> /* fall through */ >> case SDL_WINDOWEVENT_ENTER: >> if (!gui_grab && (qemu_input_is_absolute(scon->dcl.con) || >> absolute_enabled)) { >>@@ -627,9 +607,6 @@ static void handle_windowevent(SDL_Event *ev) >> scon->ignore_hotkeys = get_mod_state(); >> break; >> case SDL_WINDOWEVENT_FOCUS_LOST: >>- if (qemu_console_is_graphic(scon->dcl.con)) { >>- win32_kbd_set_window(NULL); >>- } >> if (gui_grab && !gui_fullscreen) { >> sdl_grab_end(scon); >> } >>@@ -869,10 +846,7 @@ static void sdl2_display_init(DisplayState *ds, >>DisplayOptions *o) >> #ifdef SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR /* only available since >> SDL 2.0.8 */ >> SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); >> #endif >>-#ifndef CONFIG_WIN32 >>- /* QEMU uses its own low level keyboard hook procedure on Windows */ >> SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "1"); >>-#endif >> #ifdef SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED >> SDL_SetHint(SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED, "0"); >> #endif