Message ID | 20230418065652.7152-1-vr_qemu@t-online.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | SDL2: fix handling of the AltGr key on Windows again | expand |
Am 18. April 2023 06:56:52 UTC schrieb "Volker Rümelin" <vr_qemu@t-online.de>: >Windows sends an extra left control key up/down input event for >every right alt key up/down input event for keyboards with >international layout. Since commit 830473455f ("ui/sdl2: fix >handling of AltGr key on Windows") QEMU uses a Windows low level >keyboard hook procedure to reliably filter out the special left >control key and to grab the keyboard on Windows. > >The SDL2 version 2.0.16 introduced its own Windows low level >keyboard hook procedure to grab the keyboard. Windows calls this >callback before the QEMU keyboard hook procedure. This disables >the special left control key filter when the keyboard is grabbed. > >To fix the problem, disable the SDL2 Windows low level keyboard >hook procedure. > >Reported-by: Bernhard Beschow <shentey@gmail.com> >Signed-off-by: Volker Rümelin <vr_qemu@t-online.de> FWIW: Tested-by: Bernhard Beschow <shentey@gmail.com> >--- > ui/sdl2.c | 3 +++ > 1 file changed, 3 insertions(+) > >diff --git a/ui/sdl2.c b/ui/sdl2.c >index 00aadfae37..9d703200bf 100644 >--- a/ui/sdl2.c >+++ b/ui/sdl2.c >@@ -855,7 +855,10 @@ 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 procecure 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
Am 18.04.23 um 08:56 schrieb Volker Rümelin: > Windows sends an extra left control key up/down input event for > every right alt key up/down input event for keyboards with > international layout. Since commit 830473455f ("ui/sdl2: fix > handling of AltGr key on Windows") QEMU uses a Windows low level > keyboard hook procedure to reliably filter out the special left > control key and to grab the keyboard on Windows. > > The SDL2 version 2.0.16 introduced its own Windows low level > keyboard hook procedure to grab the keyboard. Windows calls this > callback before the QEMU keyboard hook procedure. This disables > the special left control key filter when the keyboard is grabbed. > > To fix the problem, disable the SDL2 Windows low level keyboard > hook procedure. > > Reported-by: Bernhard Beschow <shentey@gmail.com> > Signed-off-by: Volker Rümelin <vr_qemu@t-online.de> > --- > ui/sdl2.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/ui/sdl2.c b/ui/sdl2.c > index 00aadfae37..9d703200bf 100644 > --- a/ui/sdl2.c > +++ b/ui/sdl2.c > @@ -855,7 +855,10 @@ 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 procecure on Windows */ s/procecure/procedure/ > 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 The typo fix for the comment does not require a v3 and can be applied in the pull request. Reviewed-by: Stefan Weil <sw@weilnetz.de>
Am 24. April 2023 03:33:05 UTC schrieb Stefan Weil <sw@weilnetz.de>: >Am 18.04.23 um 08:56 schrieb Volker Rümelin: > >> Windows sends an extra left control key up/down input event for >> every right alt key up/down input event for keyboards with >> international layout. Since commit 830473455f ("ui/sdl2: fix >> handling of AltGr key on Windows") QEMU uses a Windows low level >> keyboard hook procedure to reliably filter out the special left >> control key and to grab the keyboard on Windows. >> >> The SDL2 version 2.0.16 introduced its own Windows low level >> keyboard hook procedure to grab the keyboard. Windows calls this >> callback before the QEMU keyboard hook procedure. This disables >> the special left control key filter when the keyboard is grabbed. >> >> To fix the problem, disable the SDL2 Windows low level keyboard >> hook procedure. >> >> Reported-by: Bernhard Beschow <shentey@gmail.com> >> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de> >> --- >> ui/sdl2.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/ui/sdl2.c b/ui/sdl2.c >> index 00aadfae37..9d703200bf 100644 >> --- a/ui/sdl2.c >> +++ b/ui/sdl2.c >> @@ -855,7 +855,10 @@ 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 procecure on Windows */ > > >s/procecure/procedure/ > > >> 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 > > >The typo fix for the comment does not require a v3 and can be applied in the pull request. > >Reviewed-by: Stefan Weil <sw@weilnetz.de> Ping
diff --git a/ui/sdl2.c b/ui/sdl2.c index 00aadfae37..9d703200bf 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -855,7 +855,10 @@ 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 procecure 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
Windows sends an extra left control key up/down input event for every right alt key up/down input event for keyboards with international layout. Since commit 830473455f ("ui/sdl2: fix handling of AltGr key on Windows") QEMU uses a Windows low level keyboard hook procedure to reliably filter out the special left control key and to grab the keyboard on Windows. The SDL2 version 2.0.16 introduced its own Windows low level keyboard hook procedure to grab the keyboard. Windows calls this callback before the QEMU keyboard hook procedure. This disables the special left control key filter when the keyboard is grabbed. To fix the problem, disable the SDL2 Windows low level keyboard hook procedure. Reported-by: Bernhard Beschow <shentey@gmail.com> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de> --- ui/sdl2.c | 3 +++ 1 file changed, 3 insertions(+)