From 6659635619721f319be80e114a65c3386d9bf8a0 Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Tue, 31 Jan 2012 13:45:27 +0100 Subject: sdl: Do not grab mouse on mode switch while in background When the mouse mode changes to absolute while the SDL windows is not in focus, refrain from grabbing the input. It would steal from some other window. Signed-off-by: Jan Kiszka Signed-off-by: Anthony Liguori --- ui/sdl.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'ui') diff --git a/ui/sdl.c b/ui/sdl.c index 8cafc44..384276d 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -483,12 +483,27 @@ static void sdl_grab_end(void) sdl_update_caption(); } +static void absolute_mouse_grab(void) +{ + int mouse_x, mouse_y; + + if (SDL_GetAppState() & SDL_APPINPUTFOCUS) { + SDL_GetMouseState(&mouse_x, &mouse_y); + if (mouse_x > 0 && mouse_x < real_screen->w - 1 && + mouse_y > 0 && mouse_y < real_screen->h - 1) { + sdl_grab_start(); + } + } +} + static void sdl_mouse_mode_change(Notifier *notify, void *data) { if (kbd_mouse_is_absolute()) { if (!absolute_enabled) { - sdl_grab_start(); absolute_enabled = 1; + if (is_graphic_console()) { + absolute_mouse_grab(); + } } } else if (absolute_enabled) { if (!gui_fullscreen) { @@ -571,19 +586,6 @@ static void toggle_full_screen(DisplayState *ds) vga_hw_update(); } -static void absolute_mouse_grab(void) -{ - int mouse_x, mouse_y; - - if (SDL_GetAppState() & SDL_APPINPUTFOCUS) { - SDL_GetMouseState(&mouse_x, &mouse_y); - if (mouse_x > 0 && mouse_x < real_screen->w - 1 && - mouse_y > 0 && mouse_y < real_screen->h - 1) { - sdl_grab_start(); - } - } -} - static void handle_keydown(DisplayState *ds, SDL_Event *ev) { int mod_state; -- cgit v1.1