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>
This commit is contained in:
Marc-André Lureau
2026-06-09 01:20:45 +04:00
parent 9bc23833be
commit 6fbbff96d0

View File

@@ -27,6 +27,7 @@
#include "ui/input.h"
#include "ui/kbd-state.h"
#include "trace.h"
#include <stdint.h>
#ifdef G_OS_UNIX
#include <gio/gunixfdlist.h>
@@ -46,6 +47,7 @@ struct _DBusDisplayConsole {
QemuDBusDisplay1Keyboard *iface_kbd;
QKbdState *kbd;
Notifier led_notifier;
QemuDBusDisplay1Mouse *iface_mouse;
QemuDBusDisplay1MultiTouch *iface_touch;
@@ -150,6 +152,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,11 +370,13 @@ 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);
uint32_t leds_mask = qemu_input_get_leds_mask(ddc->dcl.con);
qemu_dbus_display1_keyboard_set_modifiers(ddc->iface_kbd, ledstate);
qemu_dbus_display1_keyboard_set_modifiers(ddc->iface_kbd, leds_mask);
}
static gboolean
@@ -577,7 +582,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,