ui/dbus: register D-Bus VC handler
Export the default consoles over the D-Bus chardev. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
3e301c8d7e
commit
7f767ca35e
53
ui/dbus.c
53
ui/dbus.c
@ -357,6 +357,57 @@ dbus_display_class_init(ObjectClass *oc, void *data)
|
|||||||
get_gl_mode, set_gl_mode);
|
get_gl_mode, set_gl_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define TYPE_CHARDEV_VC "chardev-vc"
|
||||||
|
|
||||||
|
typedef struct DBusVCClass {
|
||||||
|
DBusChardevClass parent_class;
|
||||||
|
|
||||||
|
void (*parent_parse)(QemuOpts *opts, ChardevBackend *b, Error **errp);
|
||||||
|
} DBusVCClass;
|
||||||
|
|
||||||
|
DECLARE_CLASS_CHECKERS(DBusVCClass, DBUS_VC,
|
||||||
|
TYPE_CHARDEV_VC)
|
||||||
|
|
||||||
|
static void
|
||||||
|
dbus_vc_parse(QemuOpts *opts, ChardevBackend *backend,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
DBusVCClass *klass = DBUS_VC_CLASS(object_class_by_name(TYPE_CHARDEV_VC));
|
||||||
|
const char *name = qemu_opt_get(opts, "name");
|
||||||
|
const char *id = qemu_opts_id(opts);
|
||||||
|
|
||||||
|
if (name == NULL) {
|
||||||
|
if (g_str_has_prefix(id, "compat_monitor")) {
|
||||||
|
name = "org.qemu.monitor.hmp.0";
|
||||||
|
} else if (g_str_has_prefix(id, "serial")) {
|
||||||
|
name = "org.qemu.console.serial.0";
|
||||||
|
} else {
|
||||||
|
name = "";
|
||||||
|
}
|
||||||
|
if (!qemu_opt_set(opts, "name", name, errp)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
klass->parent_parse(opts, backend, errp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dbus_vc_class_init(ObjectClass *oc, void *data)
|
||||||
|
{
|
||||||
|
DBusVCClass *klass = DBUS_VC_CLASS(oc);
|
||||||
|
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||||
|
|
||||||
|
klass->parent_parse = cc->parse;
|
||||||
|
cc->parse = dbus_vc_parse;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const TypeInfo dbus_vc_type_info = {
|
||||||
|
.name = TYPE_CHARDEV_VC,
|
||||||
|
.parent = TYPE_CHARDEV_DBUS,
|
||||||
|
.class_init = dbus_vc_class_init,
|
||||||
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
early_dbus_init(DisplayOptions *opts)
|
early_dbus_init(DisplayOptions *opts)
|
||||||
{
|
{
|
||||||
@ -370,6 +421,8 @@ early_dbus_init(DisplayOptions *opts)
|
|||||||
|
|
||||||
display_opengl = 1;
|
display_opengl = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type_register(&dbus_vc_type_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user