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 <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
25de593506
commit
6659635619
30
ui/sdl.c
30
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;
|
||||
|
Loading…
Reference in New Issue
Block a user