From 3e301c8d7ef0259c7e19277ea93a9915b55a1c6d Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Thu, 22 Jul 2021 19:43:29 +0400 Subject: ui/dbus: add chardev backend & interface Add a new chardev backend which allows D-Bus client to handle the chardev stream & events. Signed-off-by: Marc-André Lureau Acked-by: Gerd Hoffmann --- ui/dbus.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'ui/dbus.c') diff --git a/ui/dbus.c b/ui/dbus.c index 4f0bc293aa..41f1716f25 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -55,6 +55,27 @@ static const DisplayGLCtxOps dbus_gl_ops = { .dpy_gl_ctx_make_current = qemu_egl_make_context_current, }; +static NotifierList dbus_display_notifiers = + NOTIFIER_LIST_INITIALIZER(dbus_display_notifiers); + +void +dbus_display_notifier_add(Notifier *notifier) +{ + notifier_list_add(&dbus_display_notifiers, notifier); +} + +static void +dbus_display_notifier_remove(Notifier *notifier) +{ + notifier_remove(notifier); +} + +void +dbus_display_notify(DBusDisplayEvent *event) +{ + notifier_list_notify(&dbus_display_notifiers, event); +} + static void dbus_display_init(Object *o) { @@ -73,6 +94,7 @@ dbus_display_init(Object *o) g_dbus_object_manager_server_export(dd->server, vm); dbus_clipboard_init(dd); + dbus_chardev_init(dd); } static void @@ -80,6 +102,10 @@ dbus_display_finalize(Object *o) { DBusDisplay *dd = DBUS_DISPLAY(o); + if (dd->notifier.notify) { + dbus_display_notifier_remove(&dd->notifier); + } + qemu_clipboard_peer_unregister(&dd->clipboard_peer); g_clear_object(&dd->clipboard); -- cgit v1.2.3-55-g7522