@samitouri / QOSamiQemu / commits / 6fbbff96d0

ui/dbus: switch LED handling to Notifier-based input API

Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Marc-André Lureau committed Jun 9, 2026 at 01:20 UTC 6fbbff96d0a8e6359b39e240c2d1a643fdfe0e39
1 file changed +10 -4
ui/dbus-console.c
+10 -4
@@ -27,6 +27,7 @@
27 #include "ui/input.h"
28 #include "ui/kbd-state.h"
29 #include "trace.h"
30 +#include <stdint.h>
31
32 #ifdef G_OS_UNIX
33 #include <gio/gunixfdlist.h>
@@ -46,6 +47,7 @@ struct _DBusDisplayConsole {
47
48 QemuDBusDisplay1Keyboard *iface_kbd;
49 QKbdState *kbd;
50 + Notifier led_notifier;
51
52 QemuDBusDisplay1Mouse *iface_mouse;
53 QemuDBusDisplay1MultiTouch *iface_touch;
@@ -150,6 +152,7 @@ dbus_display_console_dispose(GObject *object)
152 {
153 DBusDisplayConsole *ddc = DBUS_DISPLAY_CONSOLE(object);
154
155 + qemu_input_led_notifier_remove(&ddc->led_notifier);
156 qemu_console_unregister_listener(&ddc->dcl);
157 g_clear_object(&ddc->iface_touch);
158 g_clear_object(&ddc->iface_mouse);
@@ -367,11 +370,13 @@ dbus_kbd_release(DBusDisplayConsole *ddc,
370 }
371
372 static void
370 -dbus_kbd_qemu_leds_updated(void *data, int ledstate)
373 +dbus_kbd_qemu_leds_updated(Notifier *notifier, void *data)
374 {
372 - DBusDisplayConsole *ddc = DBUS_DISPLAY_CONSOLE(data);
375 + DBusDisplayConsole *ddc = container_of(notifier, DBusDisplayConsole,
376 + led_notifier);
377 + uint32_t leds_mask = qemu_input_get_leds_mask(ddc->dcl.con);
378
374 - qemu_dbus_display1_keyboard_set_modifiers(ddc->iface_kbd, ledstate);
379 + qemu_dbus_display1_keyboard_set_modifiers(ddc->iface_kbd, leds_mask);
380 }
381
382 static gboolean
@@ -577,7 +582,8 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole *con)
582
583 ddc->kbd = qkbd_state_init(con);
584 ddc->iface_kbd = qemu_dbus_display1_keyboard_skeleton_new();
580 - qemu_add_led_event_handler(dbus_kbd_qemu_leds_updated, ddc);
585 + ddc->led_notifier.notify = dbus_kbd_qemu_leds_updated;
586 + qemu_input_led_notifier_add(&ddc->led_notifier);
587 g_object_connect(ddc->iface_kbd,
588 "swapped-signal::handle-press", dbus_kbd_press, ddc,
589 "swapped-signal::handle-release", dbus_kbd_release, ddc,