proto: drop the seat caps and cross-reference device caps instead

This commit is contained in:
Peter Hutterer 2023-02-27 15:11:36 +10:00
parent 1db37c33d5
commit 0897722493
3 changed files with 17 additions and 37 deletions

View file

@ -528,20 +528,6 @@
</description>
</request>
<enum name="capabilities" since="1" bitfield="true">
<description summary="Seat capabilities">
A set of capabilities possible available on this seat. A client may bind to these
capabilies and an EIS implementation may then create device based on the bound
capabilities.
These capabilities are binary compatible with ei_device.capabilities.
</description>
<entry name="pointer" value="2" summary="the relative pointer capability"/>
<entry name="pointer_absolute" value="4" summary="the absolute pointer capability"/>
<entry name="keyboard" value="8" summary="the keyboard capability"/>
<entry name="touchscreen" value="16" summary="the touchscreen capability"/>
</enum>
<request name="bind" since="1">
<description summary="Seat binding">
Bind to the bitmask of capabilities given. The bitmask is zero or more of the
@ -555,7 +541,7 @@
is interested in. If capabilities are dropped, the EIS implementation may
ei_device.remove devices that have these capabilities.
</description>
<arg name="capabilities" type="uint32" enum="capabilities"/>
<arg name="capabilities" type="uint32" enum="ei_device.capabilities"/>
</request>
<!-- ei_seat events version 1 -->
@ -588,11 +574,9 @@
capabilies and an EIS implementation may then create device based on the bound
capabilities.
These capabilities are binary compatible with ei_device.capabilities.
It is a protocol violation to send this event after the ei_seat.done event.
</description>
<arg name="capabilities" type="uint32" enum="capabilities" summary="the seat capabilities"/>
<arg name="capabilities" type="uint32" enum="ei_device.capabilities" summary="the seat capabilities"/>
</event>
<event name="done" since="1">

View file

@ -30,11 +30,6 @@
#include "libeis-private.h"
#include "eis-proto.h"
static_assert((1 << EIS_DEVICE_CAP_POINTER) == EIS_SEAT_CAPABILITIES_POINTER, "ABI mismatch");
static_assert((1 << EIS_DEVICE_CAP_POINTER_ABSOLUTE) == EIS_SEAT_CAPABILITIES_POINTER_ABSOLUTE, "ABI mismatch");
static_assert((1 << EIS_DEVICE_CAP_KEYBOARD) == EIS_SEAT_CAPABILITIES_KEYBOARD, "ABI mismatch");
static_assert((1 << EIS_DEVICE_CAP_TOUCH) == EIS_SEAT_CAPABILITIES_TOUCHSCREEN, "ABI mismatch");
static void
eis_seat_destroy(struct eis_seat *seat)
{
@ -96,14 +91,14 @@ client_msg_bind(struct eis_seat *seat, uint32_t caps)
{
uint32_t allowed_caps = 0;
if (seat->proto_object.version >= EIS_SEAT_CAPABILITIES_POINTER_SINCE_VERSION)
allowed_caps |= EIS_SEAT_CAPABILITIES_POINTER;
if (seat->proto_object.version >= EIS_SEAT_CAPABILITIES_POINTER_ABSOLUTE_SINCE_VERSION)
allowed_caps |= EIS_SEAT_CAPABILITIES_POINTER_ABSOLUTE;
if (seat->proto_object.version >= EIS_SEAT_CAPABILITIES_KEYBOARD_SINCE_VERSION)
allowed_caps |= EIS_SEAT_CAPABILITIES_KEYBOARD;
if (seat->proto_object.version >= EIS_SEAT_CAPABILITIES_TOUCHSCREEN_SINCE_VERSION)
allowed_caps |= EIS_SEAT_CAPABILITIES_TOUCHSCREEN;
if (seat->proto_object.version >= EIS_DEVICE_CAPABILITIES_POINTER_SINCE_VERSION)
allowed_caps |= EIS_DEVICE_CAPABILITIES_POINTER;
if (seat->proto_object.version >= EIS_DEVICE_CAPABILITIES_POINTER_ABSOLUTE_SINCE_VERSION)
allowed_caps |= EIS_DEVICE_CAPABILITIES_POINTER_ABSOLUTE;
if (seat->proto_object.version >= EIS_DEVICE_CAPABILITIES_KEYBOARD_SINCE_VERSION)
allowed_caps |= EIS_DEVICE_CAPABILITIES_KEYBOARD;
if (seat->proto_object.version >= EIS_DEVICE_CAPABILITIES_TOUCHSCREEN_SINCE_VERSION)
allowed_caps |= EIS_DEVICE_CAPABILITIES_TOUCHSCREEN;
if (caps & ~allowed_caps)
return brei_result_new(EIS_CONNECTION_DISCONNECT_REASON_VALUE,

View file

@ -44,6 +44,7 @@ try:
EiCallback,
EiConnection,
EiConnectionSetup,
EiDevice,
EiSeat,
)
except ImportError:
@ -528,10 +529,10 @@ class TestEiProtocol:
caps = call.args["capabilities"]
assert (
caps
== EiSeat.EiCapabilities.POINTER
| EiSeat.EiCapabilities.POINTER_ABSOLUTE
| EiSeat.EiCapabilities.KEYBOARD
| EiSeat.EiCapabilities.TOUCHSCREEN
== EiDevice.EiCapabilities.POINTER
| EiDevice.EiCapabilities.POINTER_ABSOLUTE
| EiDevice.EiCapabilities.KEYBOARD
| EiDevice.EiCapabilities.TOUCHSCREEN
)
break
else:
@ -643,7 +644,7 @@ class TestEiProtocol:
seat.connect("Destroyed", destroyed_cb)
if bind_first:
ei.send(seat.Bind(EiSeat.EiCapabilities.POINTER))
ei.send(seat.Bind(EiDevice.EiCapabilities.POINTER))
ei.send(seat.Release())
ei.dispatch()
@ -771,7 +772,7 @@ class TestEiProtocol:
seat = new_objects["seat"]
assert seat is not None
seat.connect("Device", on_device)
ei.send(seat.Bind(EiSeat.EiCapabilities.POINTER))
ei.send(seat.Bind(EiDevice.EiCapabilities.POINTER))
status.seats = True
def on_disconnected(connection, last_serial, reason, explanation):