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.r...@rdsoftware.de> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> --- ui/sdl.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/ui/sdl.c b/ui/sdl.c index 73e5839..6f8091c 100644 --- a/ui/sdl.c +++ b/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) { +#ifdef _WIN32 + /* Disable grab if the window no longer has the focus + * (Windows-only workaround) */ if (gui_grab && ev->active.state == SDL_APPINPUTFOCUS && !ev->active.gain && !gui_fullscreen) { sdl_grab_end(); } +#endif if (!gui_grab && ev->active.gain && is_graphic_console() && (kbd_mouse_is_absolute() || absolute_enabled)) { absolute_mouse_grab(); -- 1.7.3.4