Skip to content

Commit

Permalink
ui/console: move console compatibility check to dcl_display_console()
Browse files Browse the repository at this point in the history
The current checks are done at registration time only. However, if a DCL
has no specific console specified, it may be switched dynamically with
console_select() later on.

Let's move the checks when displaychangelistener_display_console() is
called, which includes registration time and remains fatal if the
specified console is incompatible.

Note: we may want to display the compatibility error to the DCL, this is
left for a future improvement.

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 417a231 commit 4b7b661
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions ui/console.c
Expand Up @@ -148,6 +148,8 @@ static DisplayState *get_alloc_displaystate(void);
static void text_console_update_cursor_timer(void);
static void text_console_update_cursor(void *opaque);
static bool displaychangelistener_has_dmabuf(DisplayChangeListener *dcl);
static bool console_compatible_with(QemuConsole *con,
DisplayChangeListener *dcl, Error **errp);

static void gui_update(void *opaque)
{
Expand Down Expand Up @@ -1057,13 +1059,14 @@ static void console_putchar(QemuConsole *s, int ch)
}

static void displaychangelistener_display_console(DisplayChangeListener *dcl,
QemuConsole *con)
QemuConsole *con,
Error **errp)
{
static const char nodev[] =
"This VM has no graphic display device.";
static DisplaySurface *dummy;

if (!con) {
if (!con || !console_compatible_with(con, dcl, errp)) {
if (!dcl->ops->dpy_gfx_switch) {
return;
}
Expand Down Expand Up @@ -1114,7 +1117,7 @@ void console_select(unsigned int index)
if (dcl->con != NULL) {
continue;
}
displaychangelistener_display_console(dcl, s);
displaychangelistener_display_console(dcl, s, NULL);
}
}
if (ds->have_text) {
Expand Down Expand Up @@ -1475,8 +1478,8 @@ static bool displaychangelistener_has_dmabuf(DisplayChangeListener *dcl)
return false;
}

static bool dpy_compatible_with(QemuConsole *con,
DisplayChangeListener *dcl, Error **errp)
static bool console_compatible_with(QemuConsole *con,
DisplayChangeListener *dcl, Error **errp)
{
int flags;

Expand Down Expand Up @@ -1522,10 +1525,6 @@ void register_displaychangelistener(DisplayChangeListener *dcl)

assert(!dcl->ds);

if (dcl->con) {
dpy_compatible_with(dcl->con, dcl, &error_fatal);
}

trace_displaychangelistener_register(dcl, dcl->ops->dpy_name);
dcl->ds = get_alloc_displaystate();
QLIST_INSERT_HEAD(&dcl->ds->listeners, dcl, next);
Expand All @@ -1536,7 +1535,7 @@ void register_displaychangelistener(DisplayChangeListener *dcl)
} else {
con = active_console;
}
displaychangelistener_display_console(dcl, con);
displaychangelistener_display_console(dcl, con, dcl->con ? &error_fatal : NULL);
text_console_update_cursor(NULL);
}

Expand Down

0 comments on commit 4b7b661

Please sign in to comment.