@samitouri / QOSamiQemu / commits / d4895fb4bf

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é <berrange@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Marc-André Lureau committed Feb 25, 2026 at 14:15 UTC d4895fb4bfbcd98fc687de09f9f4ef541ee5860a
1 file changed +3 -9
ui/vnc.c
+3 -9
@@ -3457,8 +3457,6 @@ VncDisplay *vnc_display_new(const char *id, Error **errp)
3457
3458 vnc_start_worker_thread(vd);
3459
3460 - register_displaychangelistener(&vd->dcl);
3461 - vd->kbd = qkbd_state_init(vd->dcl.con);
3460 vd->vmstate_handler_entry = qemu_add_vm_change_state_handler(
3461 &vmstate_change_handler, vd);
3462
@@ -4269,13 +4267,9 @@ static bool vnc_display_open(VncDisplay *vd, Error **errp)
4267 con = qemu_console_lookup_default();
4268 }
4269
4272 - if (con != vd->dcl.con) {
4273 - qkbd_state_free(vd->kbd);
4274 - unregister_displaychangelistener(&vd->dcl);
4275 - vd->dcl.con = con;
4276 - register_displaychangelistener(&vd->dcl);
4277 - vd->kbd = qkbd_state_init(vd->dcl.con);
4278 - }
4270 + vd->dcl.con = con;
4271 + register_displaychangelistener(&vd->dcl);
4272 + vd->kbd = qkbd_state_init(vd->dcl.con);
4273 qkbd_state_set_delay(vd->kbd, key_delay_ms);
4274
4275 if (saddr_list == NULL) {