mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
ui/dbus: expose vc encoding via D-Bus Chardev.VCEncoding interface
When a D-Bus VC chardev is instantiated, export an extra org.qemu.Display1.Chardev.VCEncoding interface on the chardev object. This lets D-Bus display clients discover the encoding (cp437 or utf8) in use by the virtual console. Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
@@ -53,6 +53,15 @@ dbus_display_chardev_export(DBusDisplay *dpy, DBusChardev *chr)
|
||||
sk = g_dbus_object_skeleton_new(path);
|
||||
g_dbus_object_skeleton_add_interface(
|
||||
sk, G_DBUS_INTERFACE_SKELETON(chr->iface));
|
||||
if (chr->iface_vc_encoding) {
|
||||
const char *interfaces[] = {
|
||||
"org.qemu.Display1.Chardev.VCEncoding",
|
||||
NULL
|
||||
};
|
||||
g_dbus_object_skeleton_add_interface(
|
||||
sk, G_DBUS_INTERFACE_SKELETON(chr->iface_vc_encoding));
|
||||
g_object_set(chr->iface, "interfaces", interfaces, NULL);
|
||||
}
|
||||
g_dbus_object_manager_server_export(dpy->server, sk);
|
||||
chr->exported = true;
|
||||
}
|
||||
@@ -290,6 +299,7 @@ char_dbus_finalize(Object *obj)
|
||||
};
|
||||
|
||||
dbus_display_notify(&event);
|
||||
g_clear_object(&dc->iface_vc_encoding);
|
||||
g_clear_object(&dc->iface);
|
||||
}
|
||||
|
||||
|
||||
@@ -1141,4 +1141,22 @@
|
||||
-->
|
||||
<property name="Interfaces" type="as" access="read"/>
|
||||
</interface>
|
||||
|
||||
<!--
|
||||
org.qemu.Display1.Chardev.VCEncoding:
|
||||
|
||||
Provides encoding information for virtual console chardevs.
|
||||
|
||||
This interface is present on chardev objects that are virtual
|
||||
consoles, and exposes the character encoding used by the guest.
|
||||
-->
|
||||
<interface name="org.qemu.Display1.Chardev.VCEncoding">
|
||||
<!--
|
||||
Encoding:
|
||||
|
||||
The character encoding used by the virtual console
|
||||
(matching ``ChardevVCEncoding``): ``cp437`` or ``utf8``.
|
||||
-->
|
||||
<property name="Encoding" type="s" access="read"/>
|
||||
</interface>
|
||||
</node>
|
||||
|
||||
@@ -514,6 +514,7 @@ CHARDEV_VC_ENCODING_PROPERTY_DEFINE(DBUS_VC_CHARDEV)
|
||||
static bool
|
||||
dbus_vc_open(Chardev *chr, ChardevBackend *backend, Error **errp)
|
||||
{
|
||||
DBusChardev *dc = DBUS_CHARDEV(chr);
|
||||
DBusVCChardev *vc = DBUS_VC_CHARDEV(chr);
|
||||
ChardevClass *parent =
|
||||
CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_DBUS));
|
||||
@@ -522,6 +523,11 @@ dbus_vc_open(Chardev *chr, ChardevBackend *backend, Error **errp)
|
||||
if (be->has_encoding) {
|
||||
vc->encoding = be->encoding;
|
||||
}
|
||||
dc->iface_vc_encoding =
|
||||
qemu_dbus_display1_chardev_vcencoding_skeleton_new();
|
||||
qemu_dbus_display1_chardev_vcencoding_set_encoding(
|
||||
dc->iface_vc_encoding,
|
||||
qapi_enum_lookup(&ChardevVCEncoding_lookup, vc->encoding));
|
||||
|
||||
return parent->chr_open(chr, backend, errp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user