Copyright © 2008-2011 Kristian Høgsberg Copyright © 2010-2011 Intel Corporation Copyright © 2012-2013 Collabora, Ltd. Copyright © 2023 Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. This is a special interface to setup the client as seen by the EIS implementation. The object for this interface has the fixed object id 0 and only exists until the connection has been set up, see the ei_connection_setup.connection event. Once set up, the connection setup hands over to the main ei_connection object which is the top-level object for all future requests and events. Notify the EIS implementation that configuration is complete. The ei_conection_setup object will be destroyed by the EIS implementation after this request is processed and the client must not attempt to use it after that point. This enum denotes context types for the libei context. A context type of receiver is a libei context receiving events from the EIS implementation. A context type of sender is a libei context sending events to the EIS implementation. Notify the EIS implementation of the type of this context. This request is optional, the default client type is context_type.receiver. This request must not be sent more than once. Notify the EIS implementation of the client name. The name is a human-presentable UTF-8 string. There is no requirement for the EIS implementation to use this name. This request is optional, the default client name is implementation-defined. This request must not be sent more than once. Notify the EIS implementation that the client supports the given named interface with the given maximum version number. In the future, objects created by the EIS implementation will use the respective interface version (or any lesser version). This request must be sent for the ei_connection interface, failing to do so will result in the EIS implementation disconnecting the client on ei_connection_setup.done. If the ei_connection_setup version is given, the interface of this object is upgraded to the given version. Otherwise, the ei_connection_setup version defaults to 1. A client must not provide a ei_connection_setup version higher than ei_connection_setup.version. This request must not be sent more than once per interface. The highest supported version of the ei_connection_setup interface as supported by the EIS implementation. Any requests sent by the client must be provided in this version or any lower version. This event is sent immediately after connection. A client should not issue any requests until processing this version. Note that the EIS implementation assumes that the supported client version of this interface is 1 unless and until the client announces a higher version of this interface in the ei_connection_setup.interface request. Provides the client with the connection object that is the top-level object for all future requests and events. This event is sent at some unspecified time after the client sends the ei_connection_setup.done request to the EIS implementation. The ei_connection_setup object will be destroyed by the EIS implementation immediately after this event has been sent, a client must not attempt to use it after that point. The version sent by the server is the version of the ei_connection interface as announced by ei_connection_setup.interface, or any lower version. The core connection object. This is the top-level object for any communication with the EIS implementation. The sync request asks the EIS implementation to emit the 'done' event on the returned ei_callback object. Since requests are handled in-order and events are delivered in-order, this can be used as a synchronization point to ensure all previous requests and the resulting events have been handled. The object returned by this request will be destroyed by the EIS implementation after the callback is fired and as such the client must not attempt to use it after that point. The callback_data passed in the callback is always zero. A request to the EIS implementation that this client should be disconnected. This is a courtesy request to allow the EIS implementation to distinquish between a client disconnecting on purpose and one disconnecting through the socket becoming invalid. > A reason why a client was disconnected. This event may be sent by the EIS implementation immediately before the client is disconnected. Where a client is disconnected by EIS on purpose, for example after a user interaction, the reason is disconnect_reason.disconnected and the explanation is NULL. Where a client is disconnected due to some invalid request or other protocol error, the reason is disconnect_reason.error and explanation may contain a string explaining why. This string is intended to help debugging only and is not guaranteed to stay constant. There is no guarantee this event is sent - the connection may be closed without a disconnection event. Notification that a new seat has been added. The interface version is equal or less to the client-supported version in ei_connection_setup.interface for the "ei_seat" interface. Clients can handle the 'done' event to get notified when the related request is done. Notify the client when the related request is done. An ei_seat represents a set of input devices that logically belong together. In most cases only one seat is present and all input devices on that seat share the same pointer and keyboard focus. A seat has potential capabilities, a client is expected to bind to those capabilities. The EIS implementation then creates logical input devices based on the capabilities the client is interested in. Immediately after creation of the ei_seat object, the EIS implementation sends a burst of events with information about this seat. This burst of events is terminated by the ei_seat.done event. Notification that the client is no longer interested in this seat. The EIS implementation will release any resources related to this seat and send the ei_seat.destroyed event once complete. Note that releasing a seat does not guarantee another seat becomes available. In other words, in most single-seat cases, releasing the seat means the connection becomes effectively inert. 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. Bind to the bitmask of capabilities given. The bitmask is zero or more of the capabilities provided in the ei_seat.capabilities event. That event's capabilities are used as a mask of capabilities that can be bound. Binding capabilities that are not supported in the ei_seat's interface version is a client bug and may result in disconnection. A client may send this request multiple times to adjust the capabilities it is interested in. If capabilities are dropped, the EIS implementation may ei_device.remove devices that have these capabilities. This seat has been removed and a client should release all associated resources. The name of this seat, if any. This event is optional and sent once immediately after object creation. A bitmask of the capabilities of this seat. Notification that the initial burst of events is complete and the client can set up this seat now. Notification that a new device has been added. The interface version is equal or less to the client-supported version in ei_connection_setup.interface for the "ei_device" interface. Notification that the client is no longer interested in this device. The EIS implementation will release any resources related to this device and send the ei_device.destroyed event once complete. This device has been removed and a client should release all associated resources. The name of this device, if any. This event is optional and sent once immediately after object creation. A bitmask of the capabilties of this device. The device type, one of virtual or physical. The device dimensions in mm. Notification that the initial burst of events is complete and the client can set up this device now. Notification that the client is no longer interested in this pointer. The EIS implementation will release any resources related to this pointer and send the ei_pointer.destroyed event once complete. This pointer has been removed and a client should release all associated resources. Notification that the client is no longer interested in this keyboard. The EIS implementation will release any resources related to this keyboard and send the ei_keyboard.destroyed event once complete. This keyboard has been removed and a client should release all associated resources. Notification that the client is no longer interested in this touch. The EIS implementation will release any resources related to this touch and send the ei_touch.destroyed event once complete. Notifies the EIS implementation about a new touch logically down at the given coordinates. The touchid is a unique id for this touch. Touchids may be re-used after ei_touchscreen.up. Notifies the EIS implementation about an existing touch changing position to the given coordinates. The touchid is the unique id for this touch previously sent with ei_touchscreen.down. Notifies the EIS implementation about an existing touch being logically up. The touchid is the unique id for this touch previously sent with ei_touchscreen.down. The touchid may be re-used after this request. This touch has been removed and a client should release all associated resources. See the ei_touchscreen.down request for details. This event is for ei receiver contexts. See the ei_touchscreen.motion request for details. This event is for ei receiver contexts. See the ei_touchscreen.up request for details. This event is for ei receiver contexts.