From: Marc-André Lureau Date: Wed, 25 Feb 2026 13:15:26 +0000 (+0100) Subject: ui/vnc: defer listener registration until the console is known X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4895fb4bfbcd98fc687de09f9f4ef541ee5860a;p=thirdparty%2Fqemu.git ui/vnc: defer listener registration until the console is known Previously, the display change listener was registered early in vnc_display_new() without a console, requiring vnc_display_open() to conditionally unregister and re-register it when the actual console was resolved. Since vnc_display_new() and vnc_display_open() were merged in the previous commit, simply delay the registration and keyboard state initialization to vnc_display_open(), after the console has been looked up. This removes the conditional re-registration and simplifies the code. Reviewed-by: Daniel P. Berrangé Signed-off-by: Marc-André Lureau --- diff --git a/ui/vnc.c b/ui/vnc.c index d65153a5001..ea1579135b8 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -3457,8 +3457,6 @@ VncDisplay *vnc_display_new(const char *id, Error **errp) vnc_start_worker_thread(vd); - register_displaychangelistener(&vd->dcl); - vd->kbd = qkbd_state_init(vd->dcl.con); vd->vmstate_handler_entry = qemu_add_vm_change_state_handler( &vmstate_change_handler, vd); @@ -4269,13 +4267,9 @@ static bool vnc_display_open(VncDisplay *vd, Error **errp) con = qemu_console_lookup_default(); } - if (con != vd->dcl.con) { - qkbd_state_free(vd->kbd); - unregister_displaychangelistener(&vd->dcl); - vd->dcl.con = con; - register_displaychangelistener(&vd->dcl); - vd->kbd = qkbd_state_init(vd->dcl.con); - } + vd->dcl.con = con; + register_displaychangelistener(&vd->dcl); + vd->kbd = qkbd_state_init(vd->dcl.con); qkbd_state_set_delay(vd->kbd, key_delay_ms); if (saddr_list == NULL) {