diff --git a/console.h b/console.h index b8a5c6d22a..1e69ffd0ba 100644 --- a/console.h +++ b/console.h @@ -71,6 +71,7 @@ struct DisplayState { int height; void *opaque; struct QEMUTimer *gui_timer; + uint64_t gui_timer_interval; void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h); void (*dpy_resize)(struct DisplayState *s, int w, int h); diff --git a/sdl.c b/sdl.c index 05a394c784..431e527119 100644 --- a/sdl.c +++ b/sdl.c @@ -510,6 +510,15 @@ static void sdl_refresh(DisplayState *ds) !ev->active.gain && !gui_fullscreen_initial_grab) { sdl_grab_end(); } + if (ev->active.state & SDL_APPACTIVE) { + if (ev->active.gain) { + /* Back to default interval */ + ds->gui_timer_interval = 0; + } else { + /* Sleeping interval */ + ds->gui_timer_interval = 500; + } + } break; default: break; diff --git a/vl.c b/vl.c index 5b9e4ce7a1..2019f9f026 100644 --- a/vl.c +++ b/vl.c @@ -7208,7 +7208,11 @@ static void gui_update(void *opaque) { DisplayState *ds = opaque; ds->dpy_refresh(ds); - qemu_mod_timer(ds->gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock)); + qemu_mod_timer(ds->gui_timer, + (ds->gui_timer_interval ? + ds->gui_timer_interval : + GUI_REFRESH_INTERVAL) + + qemu_get_clock(rt_clock)); } struct vm_change_state_entry {