diff mbox series

[PULL,27/27] ui/sdl2: reenable the SDL2 Windows keyboard hook procedure

Message ID 20250213160054.3937012-28-pbonzini@redhat.com (mailing list archive)
State New
Headers show
Series [PULL,01/27] rust: docs: document naming convention | expand

Commit Message

Paolo Bonzini Feb. 13, 2025, 4 p.m. UTC
From: 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>
Link: https://lore.kernel.org/r/20241231115950.6732-1-vr_qemu@t-online.de
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 ui/sdl2.c      | 26 --------------------------
 ui/meson.build |  4 ----
 2 files changed, 30 deletions(-)

Comments

Michael Tokarev Feb. 15, 2025, 5:35 p.m. UTC | #1
13.02.2025 19:00, Paolo Bonzini wrote:
> From: 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>
> Link: https://lore.kernel.org/r/20241231115950.6732-1-vr_qemu@t-online.de
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>   ui/sdl2.c      | 26 --------------------------
>   ui/meson.build |  4 ----
>   2 files changed, 30 deletions(-)

This looks like a qemu-stable material.  Please let me know if it is not.

Thanks,

/mjt
Paolo Bonzini Feb. 17, 2025, 6:21 p.m. UTC | #2
On Sat, Feb 15, 2025 at 6:36 PM Michael Tokarev <mjt@tls.msk.ru> wrote:
> This looks like a qemu-stable material.  Please let me know if it is not.

Yes, that makes sense. Thanks Michael.

Paolo
diff mbox series

Patch

diff --git a/ui/sdl2.c b/ui/sdl2.c
index 445eb1dd9f9..cda4293a53e 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"
 #include "qemu-main.h"
 
@@ -263,7 +262,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);
 }
 
@@ -271,7 +269,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);
 }
@@ -372,19 +369,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;
@@ -609,10 +593,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)) {
@@ -628,9 +608,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);
         }
@@ -870,10 +847,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
diff --git a/ui/meson.build b/ui/meson.build
index 28c7381dd10..35fb04cadf3 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',