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

View File

@ -26,6 +26,20 @@
The list of consoles available on ``/org/qemu/Display1/Console_$id``. The list of consoles available on ``/org/qemu/Display1/Console_$id``.
--> -->
<property name="ConsoleIDs" type="au" access="read"/> <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> </interface>
<!-- <!--
@ -127,12 +141,27 @@
The device address (ex: "pci/0000/02.0"). The device address (ex: "pci/0000/02.0").
--> -->
<property name="DeviceAddress" type="s" access="read"/> <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> </interface>
<!-- <!--
org.qemu.Display1.Keyboard: 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`). :dbus:iface:`~org.qemu.Display1.Console`).
--> -->
<interface name="org.qemu.Display1.Keyboard"> <interface name="org.qemu.Display1.Keyboard">
@ -171,7 +200,8 @@
<!-- <!--
org.qemu.Display1.Mouse: 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:iface:`~org.qemu.Display1.Console` documentation).
.. _dbus-button-values: .. _dbus-button-values:
@ -425,6 +455,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/> <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg> </arg>
</method> </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> </interface>
<!-- <!--
@ -522,6 +566,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/> <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg> </arg>
</method> </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> </interface>
<!-- <!--
@ -571,6 +629,20 @@
<arg type="h" name="listener" direction="in"/> <arg type="h" name="listener" direction="in"/>
<?endif?> <?endif?>
</method> </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> </interface>
<!-- <!--
@ -657,6 +729,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/> <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg> </arg>
</method> </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> </interface>
<!-- <!--
@ -745,6 +831,20 @@
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/> <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg> </arg>
</method> </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> </interface>
<!-- <!--
@ -826,5 +926,19 @@
The D-Bus unique name of the registered handler. The D-Bus unique name of the registered handler.
--> -->
<property name="Owner" type="s" access="read"/> <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> </interface>
</node> </node>