Patchwork [5/5] sdl: Limit sdl_grab_end in handle_activation to Windows hosts

login
register
mail settings
Submitter Jan Kiszka
Date Jan. 31, 2012, 12:45 p.m.
Message ID <54777ea5bba70b1206c783763c49437dd0101d25.1328013930.git.jan.kiszka@siemens.com>
Download mbox | patch
Permalink /patch/138768/
State New
Headers show

Comments

Jan Kiszka - Jan. 31, 2012, 12:45 p.m.
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>
---
 ui/sdl.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
Erik Rull - Jan. 31, 2012, 7:55 p.m.
Jan Kiszka wrote:
> 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>
> ---
>   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();

Hi Jan,

thanks for your help.

When will the patches be applied to the qemu-git?

Best regards,

Erik

Patch

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();