Skip to content

Commit

Permalink
ui/console: optionally update after gfx switch
Browse files Browse the repository at this point in the history
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 ebced09 ("console: save current scanout details")
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
  • Loading branch information
elmarco committed Mar 14, 2022
1 parent 26b032b commit c84ab0a
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions ui/console.c
Expand Up @@ -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));
}
}


Expand All @@ -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;
}

Expand All @@ -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)
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit c84ab0a

Please sign in to comment.