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;
}
};
dbus_display_notify(&event);
+ g_clear_object(&dc->iface_vc_encoding);
g_clear_object(&dc->iface);
}
-->
<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>
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));
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);
}
bool exported;
QemuDBusDisplay1Chardev *iface;
+ QemuDBusDisplay1ChardevVCEncoding *iface_vc_encoding;
} DBusChardev;
DECLARE_INSTANCE_CHECKER(DBusChardev, DBUS_CHARDEV, TYPE_CHARDEV_DBUS)