Signed-off-by: Marc-André Lureau <[email protected]>
---
ui/dbus-console.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/ui/dbus-console.c b/ui/dbus-console.c
index 21eceb24362..6ff44881895 100644
--- a/ui/dbus-console.c
+++ b/ui/dbus-console.c
@@ -46,6 +46,7 @@ struct _DBusDisplayConsole {
QemuDBusDisplay1Keyboard *iface_kbd;
QKbdState *kbd;
+ Notifier led_notifier;
QemuDBusDisplay1Mouse *iface_mouse;
QemuDBusDisplay1MultiTouch *iface_touch;
@@ -150,6 +151,7 @@ dbus_display_console_dispose(GObject *object)
{
DBusDisplayConsole *ddc = DBUS_DISPLAY_CONSOLE(object);
+ qemu_input_led_notifier_remove(&ddc->led_notifier);
qemu_console_unregister_listener(&ddc->dcl);
g_clear_object(&ddc->iface_touch);
g_clear_object(&ddc->iface_mouse);
@@ -367,9 +369,11 @@ dbus_kbd_release(DBusDisplayConsole *ddc,
}
static void
-dbus_kbd_qemu_leds_updated(void *data, int ledstate)
+dbus_kbd_qemu_leds_updated(Notifier *notifier, void *data)
{
- DBusDisplayConsole *ddc = DBUS_DISPLAY_CONSOLE(data);
+ DBusDisplayConsole *ddc = container_of(notifier, DBusDisplayConsole,
+ led_notifier);
+ int ledstate = qemu_input_get_led(ddc->dcl.con);
qemu_dbus_display1_keyboard_set_modifiers(ddc->iface_kbd, ledstate);
}
@@ -577,7 +581,8 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole
*con)
ddc->kbd = qkbd_state_init(con);
ddc->iface_kbd = qemu_dbus_display1_keyboard_skeleton_new();
- qemu_add_led_event_handler(dbus_kbd_qemu_leds_updated, ddc);
+ ddc->led_notifier.notify = dbus_kbd_qemu_leds_updated;
+ qemu_input_led_notifier_add(&ddc->led_notifier);
g_object_connect(ddc->iface_kbd,
"swapped-signal::handle-press", dbus_kbd_press, ddc,
"swapped-signal::handle-release", dbus_kbd_release, ddc,
--
2.54.0