mirror of https://gitee.com/openkylin/qemu.git
sdl: Limit sdl_grab_end in handle_activation to Windows hosts
There are scenarios on Linux with some SDL versions where
handle_activation is continuous invoked with state = SDL_APPINPUTFOCUS
and gain = 0 while we grabbed the input. This causes a ping-pong when we
grab the input after an absolute mouse entered the window.
As this sdl_grab_end was once introduced to work around a Windows-only
issue (0294ffb9c8
), limit it to that platform.
CC: Erik Rull <erik.rull@rdsoftware.de>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
822f98d2a5
commit
02df4d6fb4
4
ui/sdl.c
4
ui/sdl.c
|
@ -828,10 +828,14 @@ static void handle_mousebutton(DisplayState *ds, SDL_Event *ev)
|
||||||
|
|
||||||
static void handle_activation(DisplayState *ds, SDL_Event *ev)
|
static void handle_activation(DisplayState *ds, SDL_Event *ev)
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* Disable grab if the window no longer has the focus
|
||||||
|
* (Windows-only workaround) */
|
||||||
if (gui_grab && ev->active.state == SDL_APPINPUTFOCUS &&
|
if (gui_grab && ev->active.state == SDL_APPINPUTFOCUS &&
|
||||||
!ev->active.gain && !gui_fullscreen) {
|
!ev->active.gain && !gui_fullscreen) {
|
||||||
sdl_grab_end();
|
sdl_grab_end();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (!gui_grab && ev->active.gain && is_graphic_console() &&
|
if (!gui_grab && ev->active.gain && is_graphic_console() &&
|
||||||
(kbd_mouse_is_absolute() || absolute_enabled)) {
|
(kbd_mouse_is_absolute() || absolute_enabled)) {
|
||||||
absolute_mouse_grab();
|
absolute_mouse_grab();
|
||||||
|
|
Loading…
Reference in New Issue