diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-02-20 23:31:58 +0400 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-03-14 15:16:21 +0400 |
commit | c84ab0a500a84851debd1d4485e72325da98c778 (patch) | |
tree | 135a5f16c4ec37341ec7bd01eee6963fca987ec3 /ui/console.c | |
parent | 26b032b9b746782a1ee5156a70cc074b6de5af0f (diff) | |
download | qemu-c84ab0a500a84851debd1d4485e72325da98c778.zip qemu-c84ab0a500a84851debd1d4485e72325da98c778.tar.gz qemu-c84ab0a500a84851debd1d4485e72325da98c778.tar.bz2 |
ui/console: optionally update after gfx switch
When switching to the dummy surface, we should also call gfx_update.
But when using GL, we shouldn't call it.
By making it an argument to displaychangelistener_gfx_switch(), it will
be explicit, and cannot be forgotten that easily.
Fixes: commit ebced091 ("console: save current scanout details")
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui/console.c')
-rw-r--r-- | ui/console.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/ui/console.c b/ui/console.c index 102fcf0..06ba82d 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1059,11 +1059,18 @@ static void console_putchar(QemuConsole *s, int ch) } static void displaychangelistener_gfx_switch(DisplayChangeListener *dcl, - struct DisplaySurface *new_surface) + struct DisplaySurface *new_surface, + bool update) { if (dcl->ops->dpy_gfx_switch) { dcl->ops->dpy_gfx_switch(dcl, new_surface); } + + if (update && dcl->ops->dpy_gfx_update) { + dcl->ops->dpy_gfx_update(dcl, 0, 0, + surface_width(new_surface), + surface_height(new_surface)); + } } @@ -1079,7 +1086,7 @@ static void displaychangelistener_display_console(DisplayChangeListener *dcl, if (!dummy) { dummy = qemu_create_placeholder_surface(640, 480, nodev); } - displaychangelistener_gfx_switch(dcl, dummy); + displaychangelistener_gfx_switch(dcl, dummy, TRUE); return; } @@ -1098,12 +1105,8 @@ static void displaychangelistener_display_console(DisplayChangeListener *dcl, con->scanout.texture.width, con->scanout.texture.height); } else if (con->scanout.kind == SCANOUT_SURFACE) { - displaychangelistener_gfx_switch(dcl, con->surface); + displaychangelistener_gfx_switch(dcl, con->surface, TRUE); } - - dcl->ops->dpy_gfx_update(dcl, 0, 0, - qemu_console_get_width(con, 0), - qemu_console_get_height(con, 0)); } void console_select(unsigned int index) @@ -1682,7 +1685,7 @@ void dpy_gfx_replace_surface(QemuConsole *con, if (con != (dcl->con ? dcl->con : active_console)) { continue; } - displaychangelistener_gfx_switch(dcl, surface); + displaychangelistener_gfx_switch(dcl, surface, FALSE); } qemu_free_displaysurface(old_surface); } |