[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3] ui/sdl2: reenable the SDL2 Windows keyboard hook procedur
From: |
Bernhard Beschow |
Subject: |
Re: [PATCH v3] ui/sdl2: reenable the SDL2 Windows keyboard hook procedure |
Date: |
Sun, 12 Jan 2025 13:08:03 +0000 |
Am 31. Dezember 2024 11:59:50 UTC schrieb "Volker Rümelin"
<vr_qemu@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_qemu@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 <shentey@gmail.com>
Reviewed-by: Bernhard Beschow <shentey@gmail.com>
>---
>
>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