qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]