ui/dbus: introduce "Interfaces" properties

This property is similar to ``org.freedesktop.DBus.Interfaces`` property
on the bus interface: it's an array of strings listing the extra
interfaces and capabilities available, in a convenient way.

Most interfaces are implicit, as they are required. For
``org/qemu/Display1_$id``, we can list the Keyboard And Mouse
interfaces. Those could be optional.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20230606115658.677673-9-marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau 2023-06-06 15:56:45 +04:00
parent 306d75815c
commit 439e0164cd
2 changed files with 123 additions and 2 deletions

View File

@ -537,6 +537,12 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole *con)
char device_addr[256] = "";
DBusDisplayConsole *ddc;
int idx, i;
const char *interfaces[] = {
"org.qemu.Display1.Keyboard",
"org.qemu.Display1.Mouse",
"org.qemu.Display1.MultiTouch",
NULL
};
assert(display);
assert(con);
@ -561,6 +567,7 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole *con)
"width", qemu_console_get_width(con, 0),
"height", qemu_console_get_height(con, 0),
"device-address", device_addr,
"interfaces", interfaces,
NULL);
g_object_connect(ddc->iface,
"swapped-signal::handle-register-listener",

View File

@ -26,6 +26,20 @@
The list of consoles available on ``/org/qemu/Display1/Console_$id``.
-->
<property name="ConsoleIDs" type="au" access="read"/>
<!--
Interfaces:
This property lists extra interfaces provided by the
/org/qemu/Display1/VM object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
@ -127,12 +141,27 @@
The device address (ex: "pci/0000/02.0").
-->
<property name="DeviceAddress" type="s" access="read"/>
<!--
Interfaces:
This property lists extra interfaces provided by the
``/org/qemu/Display1/Console_$id`` object, and can be used to detect the
capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
org.qemu.Display1.Keyboard:
This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
This interface is optionally implemented on
``/org/qemu/Display1/Console_$id`` (see
:dbus:iface:`~org.qemu.Display1.Console`).
-->
<interface name="org.qemu.Display1.Keyboard">
@ -171,7 +200,8 @@
<!--
org.qemu.Display1.Mouse:
This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
This interface is optionally implemented on
``/org/qemu/Display1/Console_$id`` (see
:dbus:iface:`~org.qemu.Display1.Console` documentation).
.. _dbus-button-values:
@ -425,6 +455,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg>
</method>
<!--
Interfaces:
This property lists extra interfaces provided by the
/org/qemu/Display1/Listener object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
@ -522,6 +566,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg>
</method>
<!--
Interfaces:
This property lists extra interfaces provided by the
/org/qemu/Display1/Clipboard object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
@ -571,6 +629,20 @@
<arg type="h" name="listener" direction="in"/>
<?endif?>
</method>
<!--
Interfaces:
This property lists extra interfaces provided by the
/org/qemu/Display1/Audio object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
@ -657,6 +729,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg>
</method>
<!--
Interfaces:
This property lists extra interfaces provided by the
/org/qemu/Display1/AudioOutListener object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
@ -745,6 +831,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg>
</method>
<!--
Interfaces:
This property lists extra interfaces provided by the
/org/qemu/Display1/AudioInListener object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
<!--
@ -826,5 +926,19 @@
The D-Bus unique name of the registered handler.
-->
<property name="Owner" type="s" access="read"/>
<!--
Interfaces:
This property lists extra interfaces provided by the
``/org/qemu/Display1/Chardev_$i`` object, and can be used to detect
the capabilities with which they are communicating.
Unlike the standard D-Bus Introspectable interface, querying this
property does not require parsing XML.
(earlier version of the display interface do not provide this property)
-->
<property name="Interfaces" type="as" access="read"/>
</interface>
</node>