| <?xml version="1.0" encoding="UTF-8"?> |
| <protocol name="tablet_unstable_v2"> |
| |
| <copyright> |
| Copyright 2014 © Stephen "Lyude" Chandler Paul |
| Copyright 2015-2016 © 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. |
| </copyright> |
| |
| <description summary="Wayland protocol for graphics tablets"> |
| This description provides a high-level overview of the interplay between |
| the interfaces defined this protocol. For details, see the protocol |
| specification. |
| |
| More than one tablet may exist, and device-specifics matter. Tablets are |
| not represented by a single virtual device like wl_pointer. A client |
| binds to the tablet manager object which is just a proxy object. From |
| that, the client requests wp_tablet_manager.get_tablet_seat(wl_seat) |
| and that returns the actual interface that has all the tablets. With |
| this indirection, we can avoid merging wp_tablet into the actual Wayland |
| protocol, a long-term benefit. |
| |
| The wp_tablet_seat sends a "tablet added" event for each tablet |
| connected. That event is followed by descriptive events about the |
| hardware; currently that includes events for name, vid/pid and |
| a wp_tablet.path event that describes a local path. This path can be |
| used to uniquely identify a tablet or get more information through |
| libwacom. Emulated or nested tablets can skip any of those, e.g. a |
| virtual tablet may not have a vid/pid. The sequence of descriptive |
| events is terminated by a wp_tablet.done event to signal that a client |
| may now finalize any initialization for that tablet. |
| |
| Events from tablets require a tool in proximity. Tools are also managed |
| by the tablet seat; a "tool added" event is sent whenever a tool is new |
| to the compositor. That event is followed by a number of descriptive |
| events about the hardware; currently that includes capabilities, |
| hardware id and serial number, and tool type. Similar to the tablet |
| interface, a wp_tablet_tool.done event is sent to terminate that initial |
| sequence. |
| |
| Any event from a tool happens on the wp_tablet_tool interface. When the |
| tool gets into proximity of the tablet, a proximity_in event is sent on |
| the wp_tablet_tool interface, listing the tablet and the surface. That |
| event is followed by a motion event with the coordinates. After that, |
| it's the usual motion, axis, button, etc. events. The protocol's |
| serialisation means events are grouped by wp_tablet_tool.frame events. |
| |
| Two special events (that don't exist in X) are down and up. They signal |
| "tip touching the surface". For tablets without real proximity |
| detection, the sequence is: proximity_in, motion, down, frame. |
| |
| When the tool leaves proximity, a proximity_out event is sent. If any |
| button is still down, a button release event is sent before this |
| proximity event. These button events are sent in the same frame as the |
| proximity event to signal to the client that the buttons were held when |
| the tool left proximity. |
| |
| If the tool moves out of the surface but stays in proximity (i.e. |
| between windows), compositor-specific grab policies apply. This usually |
| means that the proximity-out is delayed until all buttons are released. |
| |
| Moving a tool physically from one tablet to the other has no real effect |
| on the protocol, since we already have the tool object from the "tool |
| added" event. All the information is already there and the proximity |
| events on both tablets are all a client needs to reconstruct what |
| happened. |
| |
| Some extra axes are normalized, i.e. the client knows the range as |
| specified in the protocol (e.g. [0, 65535]), the granularity however is |
| unknown. The current normalized axes are pressure, distance, and slider. |
| |
| Other extra axes are in physical units as specified in the protocol. |
| The current extra axes with physical units are tilt, rotation and |
| wheel rotation. |
| |
| Since tablets work independently of the pointer controlled by the mouse, |
| the focus handling is independent too and controlled by proximity. |
| The wp_tablet_tool.set_cursor request sets a tool-specific cursor. |
| This cursor surface may be the same as the mouse cursor, and it may be |
| the same across tools but it is possible to be more fine-grained. For |
| example, a client may set different cursors for the pen and eraser. |
| |
| Tools are generally independent of tablets and it is |
| compositor-specific policy when a tool can be removed. Common approaches |
| will likely include some form of removing a tool when all tablets the |
| tool was used on are removed. |
| |
| Warning! The protocol described in this file is experimental and |
| backward incompatible changes may be made. Backward compatible changes |
| may be added together with the corresponding interface version bump. |
| Backward incompatible changes are done by bumping the version number in |
| the protocol and interface names and resetting the interface version. |
| Once the protocol is to be declared stable, the 'z' prefix and the |
| version number in the protocol and interface names are removed and the |
| interface version number is reset. |
| </description> |
| |
| <interface name="zwp_tablet_manager_v2" version="1"> |
| <description summary="controller object for graphic tablet devices"> |
| An object that provides access to the graphics tablets available on this |
| system. All tablets are associated with a seat, to get access to the |
| actual tablets, use wp_tablet_manager.get_tablet_seat. |
| </description> |
| |
| <request name="get_tablet_seat"> |
| <description summary="get the tablet seat"> |
| Get the wp_tablet_seat object for the given seat. This object |
| provides access to all graphics tablets in this seat. |
| </description> |
| <arg name="tablet_seat" type="new_id" interface="zwp_tablet_seat_v2"/> |
| <arg name="seat" type="object" interface="wl_seat" summary="The wl_seat object to retrieve the tablets for" /> |
| </request> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="release the memory for the tablet manager object"> |
| Destroy the wp_tablet_manager object. Objects created from this |
| object are unaffected and should be destroyed separately. |
| </description> |
| </request> |
| </interface> |
| |
| <interface name="zwp_tablet_seat_v2" version="1"> |
| <description summary="controller object for graphic tablet devices of a seat"> |
| An object that provides access to the graphics tablets available on this |
| seat. After binding to this interface, the compositor sends a set of |
| wp_tablet_seat.tablet_added and wp_tablet_seat.tool_added events. |
| </description> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="release the memory for the tablet seat object"> |
| Destroy the wp_tablet_seat object. Objects created from this |
| object are unaffected and should be destroyed separately. |
| </description> |
| </request> |
| |
| <event name="tablet_added"> |
| <description summary="new device notification"> |
| This event is sent whenever a new tablet becomes available on this |
| seat. This event only provides the object id of the tablet, any |
| static information about the tablet (device name, vid/pid, etc.) is |
| sent through the wp_tablet interface. |
| </description> |
| <arg name="id" type="new_id" interface="zwp_tablet_v2" summary="the newly added graphics tablet"/> |
| </event> |
| |
| <event name="tool_added"> |
| <description summary="a new tool has been used with a tablet"> |
| This event is sent whenever a tool that has not previously been used |
| with a tablet comes into use. This event only provides the object id |
| of the tool; any static information about the tool (capabilities, |
| type, etc.) is sent through the wp_tablet_tool interface. |
| </description> |
| <arg name="id" type="new_id" interface="zwp_tablet_tool_v2" summary="the newly added tablet tool"/> |
| </event> |
| |
| <event name="pad_added"> |
| <description summary="new pad notification"> |
| This event is sent whenever a new pad is known to the system. Typically, |
| pads are physically attached to tablets and a pad_added event is |
| sent immediately after the wp_tablet_seat.tablet_added. |
| However, some standalone pad devices logically attach to tablets at |
| runtime, and the client must wait for wp_tablet_pad.enter to know |
| the tablet a pad is attached to. |
| |
| This event only provides the object id of the pad. All further |
| features (buttons, strips, rings) are sent through the wp_tablet_pad |
| interface. |
| </description> |
| <arg name="id" type="new_id" interface="zwp_tablet_pad_v2" summary="the newly added pad"/> |
| </event> |
| </interface> |
| |
| <interface name="zwp_tablet_tool_v2" version="1"> |
| <description summary="a physical tablet tool"> |
| An object that represents a physical tool that has been, or is |
| currently in use with a tablet in this seat. Each wp_tablet_tool |
| object stays valid until the client destroys it; the compositor |
| reuses the wp_tablet_tool object to indicate that the object's |
| respective physical tool has come into proximity of a tablet again. |
| |
| A wp_tablet_tool object's relation to a physical tool depends on the |
| tablet's ability to report serial numbers. If the tablet supports |
| this capability, then the object represents a specific physical tool |
| and can be identified even when used on multiple tablets. |
| |
| A tablet tool has a number of static characteristics, e.g. tool type, |
| hardware_serial and capabilities. These capabilities are sent in an |
| event sequence after the wp_tablet_seat.tool_added event before any |
| actual events from this tool. This initial event sequence is |
| terminated by a wp_tablet_tool.done event. |
| |
| Tablet tool events are grouped by wp_tablet_tool.frame events. |
| Any events received before a wp_tablet_tool.frame event should be |
| considered part of the same hardware state change. |
| </description> |
| |
| <request name="set_cursor"> |
| <description summary="set the tablet tool's surface"> |
| Sets the surface of the cursor used for this tool on the given |
| tablet. This request only takes effect if the tool is in proximity |
| of one of the requesting client's surfaces or the surface parameter |
| is the current pointer surface. If there was a previous surface set |
| with this request it is replaced. If surface is NULL, the cursor |
| image is hidden. |
| |
| The parameters hotspot_x and hotspot_y define the position of the |
| pointer surface relative to the pointer location. Its top-left corner |
| is always at (x, y) - (hotspot_x, hotspot_y), where (x, y) are the |
| coordinates of the pointer location, in surface-local coordinates. |
| |
| On surface.attach requests to the pointer surface, hotspot_x and |
| hotspot_y are decremented by the x and y parameters passed to the |
| request. Attach must be confirmed by wl_surface.commit as usual. |
| |
| The hotspot can also be updated by passing the currently set pointer |
| surface to this request with new values for hotspot_x and hotspot_y. |
| |
| The current and pending input regions of the wl_surface are cleared, |
| and wl_surface.set_input_region is ignored until the wl_surface is no |
| longer used as the cursor. When the use as a cursor ends, the current |
| and pending input regions become undefined, and the wl_surface is |
| unmapped. |
| |
| This request gives the surface the role of a wp_tablet_tool cursor. A |
| surface may only ever be used as the cursor surface for one |
| wp_tablet_tool. If the surface already has another role or has |
| previously been used as cursor surface for a different tool, a |
| protocol error is raised. |
| </description> |
| <arg name="serial" type="uint" summary="serial of the enter event"/> |
| <arg name="surface" type="object" interface="wl_surface" allow-null="true"/> |
| <arg name="hotspot_x" type="int" summary="surface-local x coordinate"/> |
| <arg name="hotspot_y" type="int" summary="surface-local y coordinate"/> |
| </request> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="destroy the tool object"> |
| This destroys the client's resource for this tool object. |
| </description> |
| </request> |
| |
| <enum name="type"> |
| <description summary="a physical tool type"> |
| Describes the physical type of a tool. The physical type of a tool |
| generally defines its base usage. |
| |
| The mouse tool represents a mouse-shaped tool that is not a relative |
| device but bound to the tablet's surface, providing absolute |
| coordinates. |
| |
| The lens tool is a mouse-shaped tool with an attached lens to |
| provide precision focus. |
| </description> |
| <entry name="pen" value="0x140" summary="Pen"/> |
| <entry name="eraser" value="0x141" summary="Eraser"/> |
| <entry name="brush" value="0x142" summary="Brush"/> |
| <entry name="pencil" value="0x143" summary="Pencil"/> |
| <entry name="airbrush" value="0x144" summary="Airbrush"/> |
| <entry name="finger" value="0x145" summary="Finger"/> |
| <entry name="mouse" value="0x146" summary="Mouse"/> |
| <entry name="lens" value="0x147" summary="Lens"/> |
| </enum> |
| |
| <event name="type"> |
| <description summary="tool type"> |
| The tool type is the high-level type of the tool and usually decides |
| the interaction expected from this tool. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_tool.done event. |
| </description> |
| <arg name="tool_type" type="uint" enum="type" summary="the physical tool type"/> |
| </event> |
| |
| <event name="hardware_serial"> |
| <description summary="unique hardware serial number of the tool"> |
| If the physical tool can be identified by a unique 64-bit serial |
| number, this event notifies the client of this serial number. |
| |
| If multiple tablets are available in the same seat and the tool is |
| uniquely identifiable by the serial number, that tool may move |
| between tablets. |
| |
| Otherwise, if the tool has no serial number and this event is |
| missing, the tool is tied to the tablet it first comes into |
| proximity with. Even if the physical tool is used on multiple |
| tablets, separate wp_tablet_tool objects will be created, one per |
| tablet. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_tool.done event. |
| </description> |
| <arg name="hardware_serial_hi" type="uint" summary="the unique serial number of the tool, most significant bits"/> |
| <arg name="hardware_serial_lo" type="uint" summary="the unique serial number of the tool, least significant bits"/> |
| </event> |
| |
| <event name="hardware_id_wacom"> |
| <description summary="hardware id notification in Wacom's format"> |
| This event notifies the client of a hardware id available on this tool. |
| |
| The hardware id is a device-specific 64-bit id that provides extra |
| information about the tool in use, beyond the wl_tool.type |
| enumeration. The format of the id is specific to tablets made by |
| Wacom Inc. For example, the hardware id of a Wacom Grip |
| Pen (a stylus) is 0x802. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_tool.done event. |
| </description> |
| <arg name="hardware_id_hi" type="uint" summary="the hardware id, most significant bits"/> |
| <arg name="hardware_id_lo" type="uint" summary="the hardware id, least significant bits"/> |
| </event> |
| |
| <enum name="capability"> |
| <description summary="capability flags for a tool"> |
| Describes extra capabilities on a tablet. |
| |
| Any tool must provide x and y values, extra axes are |
| device-specific. |
| </description> |
| <entry name="tilt" value="1" summary="Tilt axes"/> |
| <entry name="pressure" value="2" summary="Pressure axis"/> |
| <entry name="distance" value="3" summary="Distance axis"/> |
| <entry name="rotation" value="4" summary="Z-rotation axis"/> |
| <entry name="slider" value="5" summary="Slider axis"/> |
| <entry name="wheel" value="6" summary="Wheel axis"/> |
| </enum> |
| |
| <event name="capability"> |
| <description summary="tool capability notification"> |
| This event notifies the client of any capabilities of this tool, |
| beyond the main set of x/y axes and tip up/down detection. |
| |
| One event is sent for each extra capability available on this tool. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_tool.done event. |
| </description> |
| <arg name="capability" type="uint" enum="capability" summary="the capability"/> |
| </event> |
| |
| <event name="done"> |
| <description summary="tool description events sequence complete"> |
| This event signals the end of the initial burst of descriptive |
| events. A client may consider the static description of the tool to |
| be complete and finalize initialization of the tool. |
| </description> |
| </event> |
| |
| <event name="removed"> |
| <description summary="tool removed"> |
| This event is sent when the tool is removed from the system and will |
| send no further events. Should the physical tool come back into |
| proximity later, a new wp_tablet_tool object will be created. |
| |
| It is compositor-dependent when a tool is removed. A compositor may |
| remove a tool on proximity out, tablet removal or any other reason. |
| A compositor may also keep a tool alive until shutdown. |
| |
| If the tool is currently in proximity, a proximity_out event will be |
| sent before the removed event. See wp_tablet_tool.proximity_out for |
| the handling of any buttons logically down. |
| |
| When this event is received, the client must wp_tablet_tool.destroy |
| the object. |
| </description> |
| </event> |
| |
| <event name="proximity_in"> |
| <description summary="proximity in event"> |
| Notification that this tool is focused on a certain surface. |
| |
| This event can be received when the tool has moved from one surface to |
| another, or when the tool has come back into proximity above the |
| surface. |
| |
| If any button is logically down when the tool comes into proximity, |
| the respective button event is sent after the proximity_in event but |
| within the same frame as the proximity_in event. |
| </description> |
| <arg name="serial" type="uint"/> |
| <arg name="tablet" type="object" interface="zwp_tablet_v2" summary="The tablet the tool is in proximity of"/> |
| <arg name="surface" type="object" interface="wl_surface" summary="The current surface the tablet tool is over"/> |
| </event> |
| |
| <event name="proximity_out"> |
| <description summary="proximity out event"> |
| Notification that this tool has either left proximity, or is no |
| longer focused on a certain surface. |
| |
| When the tablet tool leaves proximity of the tablet, button release |
| events are sent for each button that was held down at the time of |
| leaving proximity. These events are sent before the proximity_out |
| event but within the same wp_tablet.frame. |
| |
| If the tool stays within proximity of the tablet, but the focus |
| changes from one surface to another, a button release event may not |
| be sent until the button is actually released or the tool leaves the |
| proximity of the tablet. |
| </description> |
| </event> |
| |
| <event name="down"> |
| <description summary="tablet tool is making contact"> |
| Sent whenever the tablet tool comes in contact with the surface of the |
| tablet. |
| |
| If the tool is already in contact with the tablet when entering the |
| input region, the client owning said region will receive a |
| wp_tablet.proximity_in event, followed by a wp_tablet.down |
| event and a wp_tablet.frame event. |
| |
| Note that this event describes logical contact, not physical |
| contact. On some devices, a compositor may not consider a tool in |
| logical contact until a minimum physical pressure threshold is |
| exceeded. |
| </description> |
| <arg name="serial" type="uint"/> |
| </event> |
| |
| <event name="up"> |
| <description summary="tablet tool is no longer making contact"> |
| Sent whenever the tablet tool stops making contact with the surface of |
| the tablet, or when the tablet tool moves out of the input region |
| and the compositor grab (if any) is dismissed. |
| |
| If the tablet tool moves out of the input region while in contact |
| with the surface of the tablet and the compositor does not have an |
| ongoing grab on the surface, the client owning said region will |
| receive a wp_tablet.up event, followed by a wp_tablet.proximity_out |
| event and a wp_tablet.frame event. If the compositor has an ongoing |
| grab on this device, this event sequence is sent whenever the grab |
| is dismissed in the future. |
| |
| Note that this event describes logical contact, not physical |
| contact. On some devices, a compositor may not consider a tool out |
| of logical contact until physical pressure falls below a specific |
| threshold. |
| </description> |
| </event> |
| |
| <event name="motion"> |
| <description summary="motion event"> |
| Sent whenever a tablet tool moves. |
| </description> |
| <arg name="x" type="fixed" summary="surface-local x coordinate"/> |
| <arg name="y" type="fixed" summary="surface-local y coordinate"/> |
| </event> |
| |
| <event name="pressure"> |
| <description summary="pressure change event"> |
| Sent whenever the pressure axis on a tool changes. The value of this |
| event is normalized to a value between 0 and 65535. |
| |
| Note that pressure may be nonzero even when a tool is not in logical |
| contact. See the down and up events for more details. |
| </description> |
| <arg name="pressure" type="uint" summary="The current pressure value"/> |
| </event> |
| |
| <event name="distance"> |
| <description summary="distance change event"> |
| Sent whenever the distance axis on a tool changes. The value of this |
| event is normalized to a value between 0 and 65535. |
| |
| Note that distance may be nonzero even when a tool is not in logical |
| contact. See the down and up events for more details. |
| </description> |
| <arg name="distance" type="uint" summary="The current distance value"/> |
| </event> |
| |
| <event name="tilt"> |
| <description summary="tilt change event"> |
| Sent whenever one or both of the tilt axes on a tool change. Each tilt |
| value is in degrees, relative to the z-axis of the tablet. |
| The angle is positive when the top of a tool tilts along the |
| positive x or y axis. |
| </description> |
| <arg name="tilt_x" type="fixed" summary="The current value of the X tilt axis"/> |
| <arg name="tilt_y" type="fixed" summary="The current value of the Y tilt axis"/> |
| </event> |
| |
| <event name="rotation"> |
| <description summary="z-rotation change event"> |
| Sent whenever the z-rotation axis on the tool changes. The |
| rotation value is in degrees clockwise from the tool's |
| logical neutral position. |
| </description> |
| <arg name="degrees" type="fixed" summary="The current rotation of the Z axis"/> |
| </event> |
| |
| <event name="slider"> |
| <description summary="Slider position change event"> |
| Sent whenever the slider position on the tool changes. The |
| value is normalized between -65535 and 65535, with 0 as the logical |
| neutral position of the slider. |
| |
| The slider is available on e.g. the Wacom Airbrush tool. |
| </description> |
| <arg name="position" type="int" summary="The current position of slider"/> |
| </event> |
| |
| <event name="wheel"> |
| <description summary="Wheel delta event"> |
| Sent whenever the wheel on the tool emits an event. This event |
| contains two values for the same axis change. The degrees value is |
| in the same orientation as the wl_pointer.vertical_scroll axis. The |
| clicks value is in discrete logical clicks of the mouse wheel. This |
| value may be zero if the movement of the wheel was less |
| than one logical click. |
| |
| Clients should choose either value and avoid mixing degrees and |
| clicks. The compositor may accumulate values smaller than a logical |
| click and emulate click events when a certain threshold is met. |
| Thus, wl_tablet_tool.wheel events with non-zero clicks values may |
| have different degrees values. |
| </description> |
| <arg name="degrees" type="fixed" summary="The wheel delta in degrees"/> |
| <arg name="clicks" type="int" summary="The wheel delta in discrete clicks"/> |
| </event> |
| |
| <enum name="button_state"> |
| <description summary="physical button state"> |
| Describes the physical state of a button that produced the button event. |
| </description> |
| <entry name="released" value="0" summary="button is not pressed"/> |
| <entry name="pressed" value="1" summary="button is pressed"/> |
| </enum> |
| |
| <event name="button"> |
| <description summary="button event"> |
| Sent whenever a button on the tool is pressed or released. |
| |
| If a button is held down when the tool moves in or out of proximity, |
| button events are generated by the compositor. See |
| wp_tablet_tool.proximity_in and wp_tablet_tool.proximity_out for |
| details. |
| </description> |
| |
| <arg name="serial" type="uint"/> |
| <arg name="button" type="uint" summary="The button whose state has changed"/> |
| <arg name="state" type="uint" enum="button_state" summary="Whether the button was pressed or released"/> |
| </event> |
| |
| <event name="frame"> |
| <description summary="frame event"> |
| Marks the end of a series of axis and/or button updates from the |
| tablet. The Wayland protocol requires axis updates to be sent |
| sequentially, however all events within a frame should be considered |
| one hardware event. |
| </description> |
| <arg name="time" type="uint" summary="The time of the event with millisecond granularity"/> |
| </event> |
| |
| <enum name="error"> |
| <entry name="role" value="0" summary="given wl_surface has another role"/> |
| </enum> |
| </interface> |
| |
| <interface name="zwp_tablet_v2" version="1"> |
| <description summary="graphics tablet device"> |
| The wp_tablet interface represents one graphics tablet device. The |
| tablet interface itself does not generate events; all events are |
| generated by wp_tablet_tool objects when in proximity above a tablet. |
| |
| A tablet has a number of static characteristics, e.g. device name and |
| pid/vid. These capabilities are sent in an event sequence after the |
| wp_tablet_seat.tablet_added event. This initial event sequence is |
| terminated by a wp_tablet.done event. |
| </description> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="destroy the tablet object"> |
| This destroys the client's resource for this tablet object. |
| </description> |
| </request> |
| |
| <event name="name"> |
| <description summary="tablet device name"> |
| This event is sent in the initial burst of events before the |
| wp_tablet.done event. |
| </description> |
| <arg name="name" type="string" summary="the device name"/> |
| </event> |
| |
| <event name="id"> |
| <description summary="tablet device USB vendor/product id"> |
| This event is sent in the initial burst of events before the |
| wp_tablet.done event. |
| </description> |
| <arg name="vid" type="uint" summary="USB vendor id"/> |
| <arg name="pid" type="uint" summary="USB product id"/> |
| </event> |
| |
| <event name="path"> |
| <description summary="path to the device"> |
| A system-specific device path that indicates which device is behind |
| this wp_tablet. This information may be used to gather additional |
| information about the device, e.g. through libwacom. |
| |
| A device may have more than one device path. If so, multiple |
| wp_tablet.path events are sent. A device may be emulated and not |
| have a device path, and in that case this event will not be sent. |
| |
| The format of the path is unspecified, it may be a device node, a |
| sysfs path, or some other identifier. It is up to the client to |
| identify the string provided. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet.done event. |
| </description> |
| <arg name="path" type="string" summary="path to local device"/> |
| </event> |
| |
| <event name="done"> |
| <description summary="tablet description events sequence complete"> |
| This event is sent immediately to signal the end of the initial |
| burst of descriptive events. A client may consider the static |
| description of the tablet to be complete and finalize initialization |
| of the tablet. |
| </description> |
| </event> |
| |
| <event name="removed"> |
| <description summary="tablet removed event"> |
| Sent when the tablet has been removed from the system. When a tablet |
| is removed, some tools may be removed. |
| |
| When this event is received, the client must wp_tablet.destroy |
| the object. |
| </description> |
| </event> |
| </interface> |
| |
| <interface name="zwp_tablet_pad_ring_v2" version="1"> |
| <description summary="pad ring"> |
| A circular interaction area, such as the touch ring on the Wacom Intuos |
| Pro series tablets. |
| |
| Events on a ring are logically grouped by the wl_tablet_pad_ring.frame |
| event. |
| </description> |
| |
| <request name="set_feedback"> |
| <description summary="set compositor feedback"> |
| Request that the compositor use the provided feedback string |
| associated with this ring. This request should be issued immediately |
| after a wp_tablet_pad_group.mode_switch event from the corresponding |
| group is received, or whenever the ring is mapped to a different |
| action. See wp_tablet_pad_group.mode_switch for more details. |
| |
| Clients are encouraged to provide context-aware descriptions for |
| the actions associated with the ring; compositors may use this |
| information to offer visual feedback about the button layout |
| (eg. on-screen displays). |
| |
| The provided string 'description' is a UTF-8 encoded string to be |
| associated with this ring, and is considered user-visible; general |
| internationalization rules apply. |
| |
| The serial argument will be that of the last |
| wp_tablet_pad_group.mode_switch event received for the group of this |
| ring. Requests providing other serials than the most recent one will be |
| ignored. |
| </description> |
| <arg name="description" type="string" summary="ring description"/> |
| <arg name="serial" type="uint" summary="serial of the mode switch event"/> |
| </request> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="destroy the ring object"> |
| This destroys the client's resource for this ring object. |
| </description> |
| </request> |
| |
| <enum name="source"> |
| <description summary="ring axis source"> |
| Describes the source types for ring events. This indicates to the |
| client how a ring event was physically generated; a client may |
| adjust the user interface accordingly. For example, events |
| from a "finger" source may trigger kinetic scrolling. |
| </description> |
| <entry name="finger" value="1" summary="finger"/> |
| </enum> |
| |
| <event name="source"> |
| <description summary="ring event source"> |
| Source information for ring events. |
| |
| This event does not occur on its own. It is sent before a |
| wp_tablet_pad_ring.frame event and carries the source information |
| for all events within that frame. |
| |
| The source specifies how this event was generated. If the source is |
| wp_tablet_pad_ring.source.finger, a wp_tablet_pad_ring.stop event |
| will be sent when the user lifts the finger off the device. |
| |
| This event is optional. If the source is unknown for an interaction, |
| no event is sent. |
| </description> |
| <arg name="source" type="uint" enum="source" summary="the event source"/> |
| </event> |
| |
| <event name="angle"> |
| <description summary="angle changed"> |
| Sent whenever the angle on a ring changes. |
| |
| The angle is provided in degrees clockwise from the logical |
| north of the ring in the pad's current rotation. |
| </description> |
| <arg name="degrees" type="fixed" summary="the current angle in degrees"/> |
| </event> |
| |
| <event name="stop"> |
| <description summary="interaction stopped"> |
| Stop notification for ring events. |
| |
| For some wp_tablet_pad_ring.source types, a wp_tablet_pad_ring.stop |
| event is sent to notify a client that the interaction with the ring |
| has terminated. This enables the client to implement kinetic scrolling. |
| See the wp_tablet_pad_ring.source documentation for information on |
| when this event may be generated. |
| |
| Any wp_tablet_pad_ring.angle events with the same source after this |
| event should be considered as the start of a new interaction. |
| </description> |
| </event> |
| |
| <event name="frame"> |
| <description summary="end of a ring event sequence"> |
| Indicates the end of a set of ring events that logically belong |
| together. A client is expected to accumulate the data in all events |
| within the frame before proceeding. |
| |
| All wp_tablet_pad_ring events before a wp_tablet_pad_ring.frame event belong |
| logically together. For example, on termination of a finger interaction |
| on a ring the compositor will send a wp_tablet_pad_ring.source event, |
| a wp_tablet_pad_ring.stop event and a wp_tablet_pad_ring.frame event. |
| |
| A wp_tablet_pad_ring.frame event is sent for every logical event |
| group, even if the group only contains a single wp_tablet_pad_ring |
| event. Specifically, a client may get a sequence: angle, frame, |
| angle, frame, etc. |
| </description> |
| <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> |
| </event> |
| </interface> |
| |
| <interface name="zwp_tablet_pad_strip_v2" version="1"> |
| <description summary="pad strip"> |
| A linear interaction area, such as the strips found in Wacom Cintiq |
| models. |
| |
| Events on a strip are logically grouped by the wl_tablet_pad_strip.frame |
| event. |
| </description> |
| |
| <request name="set_feedback"> |
| <description summary="set compositor feedback"> |
| Requests the compositor to use the provided feedback string |
| associated with this strip. This request should be issued immediately |
| after a wp_tablet_pad_group.mode_switch event from the corresponding |
| group is received, or whenever the strip is mapped to a different |
| action. See wp_tablet_pad_group.mode_switch for more details. |
| |
| Clients are encouraged to provide context-aware descriptions for |
| the actions associated with the strip, and compositors may use this |
| information to offer visual feedback about the button layout |
| (eg. on-screen displays). |
| |
| The provided string 'description' is a UTF-8 encoded string to be |
| associated with this ring, and is considered user-visible; general |
| internationalization rules apply. |
| |
| The serial argument will be that of the last |
| wp_tablet_pad_group.mode_switch event received for the group of this |
| strip. Requests providing other serials than the most recent one will be |
| ignored. |
| </description> |
| <arg name="description" type="string" summary="strip description"/> |
| <arg name="serial" type="uint" summary="serial of the mode switch event"/> |
| </request> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="destroy the strip object"> |
| This destroys the client's resource for this strip object. |
| </description> |
| </request> |
| |
| <enum name="source"> |
| <description summary="strip axis source"> |
| Describes the source types for strip events. This indicates to the |
| client how a strip event was physically generated; a client may |
| adjust the user interface accordingly. For example, events |
| from a "finger" source may trigger kinetic scrolling. |
| </description> |
| <entry name="finger" value="1" summary="finger"/> |
| </enum> |
| |
| <event name="source"> |
| <description summary="strip event source"> |
| Source information for strip events. |
| |
| This event does not occur on its own. It is sent before a |
| wp_tablet_pad_strip.frame event and carries the source information |
| for all events within that frame. |
| |
| The source specifies how this event was generated. If the source is |
| wp_tablet_pad_strip.source.finger, a wp_tablet_pad_strip.stop event |
| will be sent when the user lifts their finger off the device. |
| |
| This event is optional. If the source is unknown for an interaction, |
| no event is sent. |
| </description> |
| <arg name="source" type="uint" enum="source" summary="the event source"/> |
| </event> |
| |
| <event name="position"> |
| <description summary="position changed"> |
| Sent whenever the position on a strip changes. |
| |
| The position is normalized to a range of [0, 65535], the 0-value |
| represents the top-most and/or left-most position of the strip in |
| the pad's current rotation. |
| </description> |
| <arg name="position" type="uint" summary="the current position"/> |
| </event> |
| |
| <event name="stop"> |
| <description summary="interaction stopped"> |
| Stop notification for strip events. |
| |
| For some wp_tablet_pad_strip.source types, a wp_tablet_pad_strip.stop |
| event is sent to notify a client that the interaction with the strip |
| has terminated. This enables the client to implement kinetic |
| scrolling. See the wp_tablet_pad_strip.source documentation for |
| information on when this event may be generated. |
| |
| Any wp_tablet_pad_strip.position events with the same source after this |
| event should be considered as the start of a new interaction. |
| </description> |
| </event> |
| |
| <event name="frame"> |
| <description summary="end of a strip event sequence"> |
| Indicates the end of a set of events that represent one logical |
| hardware strip event. A client is expected to accumulate the data |
| in all events within the frame before proceeding. |
| |
| All wp_tablet_pad_strip events before a wp_tablet_pad_strip.frame event belong |
| logically together. For example, on termination of a finger interaction |
| on a strip the compositor will send a wp_tablet_pad_strip.source event, |
| a wp_tablet_pad_strip.stop event and a wp_tablet_pad_strip.frame |
| event. |
| |
| A wp_tablet_pad_strip.frame event is sent for every logical event |
| group, even if the group only contains a single wp_tablet_pad_strip |
| event. Specifically, a client may get a sequence: position, frame, |
| position, frame, etc. |
| </description> |
| <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> |
| </event> |
| </interface> |
| |
| <interface name="zwp_tablet_pad_group_v2" version="1"> |
| <description summary="a set of buttons, rings and strips"> |
| A pad group describes a distinct (sub)set of buttons, rings and strips |
| present in the tablet. The criteria of this grouping is usually positional, |
| eg. if a tablet has buttons on the left and right side, 2 groups will be |
| presented. The physical arrangement of groups is undisclosed and may |
| change on the fly. |
| |
| Pad groups will announce their features during pad initialization. Between |
| the corresponding wp_tablet_pad.group event and wp_tablet_pad_group.done, the |
| pad group will announce the buttons, rings and strips contained in it, |
| plus the number of supported modes. |
| |
| Modes are a mechanism to allow multiple groups of actions for every element |
| in the pad group. The number of groups and available modes in each is |
| persistent across device plugs. The current mode is user-switchable, it |
| will be announced through the wp_tablet_pad_group.mode_switch event both |
| whenever it is switched, and after wp_tablet_pad.enter. |
| |
| The current mode logically applies to all elements in the pad group, |
| although it is at clients' discretion whether to actually perform different |
| actions, and/or issue the respective .set_feedback requests to notify the |
| compositor. See the wp_tablet_pad_group.mode_switch event for more details. |
| </description> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="destroy the pad object"> |
| Destroy the wp_tablet_pad_group object. Objects created from this object |
| are unaffected and should be destroyed separately. |
| </description> |
| </request> |
| |
| <event name="buttons"> |
| <description summary="buttons announced"> |
| Sent on wp_tablet_pad_group initialization to announce the available |
| buttons in the group. Button indices start at 0, a button may only be |
| in one group at a time. |
| |
| This event is first sent in the initial burst of events before the |
| wp_tablet_pad_group.done event. |
| |
| Some buttons are reserved by the compositor. These buttons may not be |
| assigned to any wp_tablet_pad_group. Compositors may broadcast this |
| event in the case of changes to the mapping of these reserved buttons. |
| If the compositor happens to reserve all buttons in a group, this event |
| will be sent with an empty array. |
| </description> |
| <arg name="buttons" type="array" summary="buttons in this group"/> |
| </event> |
| |
| <event name="ring"> |
| <description summary="ring announced"> |
| Sent on wp_tablet_pad_group initialization to announce available rings. |
| One event is sent for each ring available on this pad group. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_pad_group.done event. |
| </description> |
| <arg name="ring" type="new_id" interface="zwp_tablet_pad_ring_v2"/> |
| </event> |
| |
| <event name="strip"> |
| <description summary="strip announced"> |
| Sent on wp_tablet_pad initialization to announce available strips. |
| One event is sent for each strip available on this pad group. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_pad_group.done event. |
| </description> |
| <arg name="strip" type="new_id" interface="zwp_tablet_pad_strip_v2"/> |
| </event> |
| |
| <event name="modes"> |
| <description summary="mode-switch ability announced"> |
| Sent on wp_tablet_pad_group initialization to announce that the pad |
| group may switch between modes. A client may use a mode to store a |
| specific configuration for buttons, rings and strips and use the |
| wl_tablet_pad_group.mode_switch event to toggle between these |
| configurations. Mode indices start at 0. |
| |
| Switching modes is compositor-dependent. See the |
| wp_tablet_pad_group.mode_switch event for more details. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_pad_group.done event. This event is only sent when more than |
| more than one mode is available. |
| </description> |
| <arg name="modes" type="uint" summary="the number of modes"/> |
| </event> |
| |
| <event name="done"> |
| <description summary="tablet group description events sequence complete"> |
| This event is sent immediately to signal the end of the initial |
| burst of descriptive events. A client may consider the static |
| description of the tablet to be complete and finalize initialization |
| of the tablet group. |
| </description> |
| </event> |
| |
| <event name="mode_switch"> |
| <description summary="mode switch event"> |
| Notification that the mode was switched. |
| |
| A mode applies to all buttons, rings and strips in a group |
| simultaneously, but a client is not required to assign different actions |
| for each mode. For example, a client may have mode-specific button |
| mappings but map the ring to vertical scrolling in all modes. Mode |
| indices start at 0. |
| |
| Switching modes is compositor-dependent. The compositor may provide |
| visual cues to the client about the mode, e.g. by toggling LEDs on |
| the tablet device. Mode-switching may be software-controlled or |
| controlled by one or more physical buttons. For example, on a Wacom |
| Intuos Pro, the button inside the ring may be assigned to switch |
| between modes. |
| |
| The compositor will also send this event after wp_tablet_pad.enter on |
| each group in order to notify of the current mode. Groups that only |
| feature one mode will use mode=0 when emitting this event. |
| |
| If a button action in the new mode differs from the action in the |
| previous mode, the client should immediately issue a |
| wp_tablet_pad.set_feedback request for each changed button. |
| |
| If a ring or strip action in the new mode differs from the action |
| in the previous mode, the client should immediately issue a |
| wp_tablet_ring.set_feedback or wp_tablet_strip.set_feedback request |
| for each changed ring or strip. |
| </description> |
| <arg name="time" type="uint" summary="the time of the event with millisecond granularity"/> |
| <arg name="serial" type="uint"/> |
| <arg name="mode" type="uint" summary="the new mode of the pad"/> |
| </event> |
| </interface> |
| |
| <interface name="zwp_tablet_pad_v2" version="1"> |
| <description summary="a set of buttons, rings and strips"> |
| A pad device is a set of buttons, rings and strips |
| usually physically present on the tablet device itself. Some |
| exceptions exist where the pad device is physically detached, e.g. the |
| Wacom ExpressKey Remote. |
| |
| Pad devices have no axes that control the cursor and are generally |
| auxiliary devices to the tool devices used on the tablet surface. |
| |
| A pad device has a number of static characteristics, e.g. the number |
| of rings. These capabilities are sent in an event sequence after the |
| wp_tablet_seat.pad_added event before any actual events from this pad. |
| This initial event sequence is terminated by a wp_tablet_pad.done |
| event. |
| |
| All pad features (buttons, rings and strips) are logically divided into |
| groups and all pads have at least one group. The available groups are |
| notified through the wp_tablet_pad.group event; the compositor will |
| emit one event per group before emitting wp_tablet_pad.done. |
| |
| Groups may have multiple modes. Modes allow clients to map multiple |
| actions to a single pad feature. Only one mode can be active per group, |
| although different groups may have different active modes. |
| </description> |
| |
| <request name="set_feedback"> |
| <description summary="set compositor feedback"> |
| Requests the compositor to use the provided feedback string |
| associated with this button. This request should be issued immediately |
| after a wp_tablet_pad_group.mode_switch event from the corresponding |
| group is received, or whenever a button is mapped to a different |
| action. See wp_tablet_pad_group.mode_switch for more details. |
| |
| Clients are encouraged to provide context-aware descriptions for |
| the actions associated with each button, and compositors may use |
| this information to offer visual feedback on the button layout |
| (e.g. on-screen displays). |
| |
| Button indices start at 0. Setting the feedback string on a button |
| that is reserved by the compositor (i.e. not belonging to any |
| wp_tablet_pad_group) does not generate an error but the compositor |
| is free to ignore the request. |
| |
| The provided string 'description' is a UTF-8 encoded string to be |
| associated with this ring, and is considered user-visible; general |
| internationalization rules apply. |
| |
| The serial argument will be that of the last |
| wp_tablet_pad_group.mode_switch event received for the group of this |
| button. Requests providing other serials than the most recent one will |
| be ignored. |
| </description> |
| <arg name="button" type="uint" summary="button index"/> |
| <arg name="description" type="string" summary="button description"/> |
| <arg name="serial" type="uint" summary="serial of the mode switch event"/> |
| </request> |
| |
| <request name="destroy" type="destructor"> |
| <description summary="destroy the pad object"> |
| Destroy the wp_tablet_pad object. Objects created from this object |
| are unaffected and should be destroyed separately. |
| </description> |
| </request> |
| |
| <event name="group"> |
| <description summary="group announced"> |
| Sent on wp_tablet_pad initialization to announce available groups. |
| One event is sent for each pad group available. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_pad.done event. At least one group will be announced. |
| </description> |
| <arg name="pad_group" type="new_id" interface="zwp_tablet_pad_group_v2"/> |
| </event> |
| |
| <event name="path"> |
| <description summary="path to the device"> |
| A system-specific device path that indicates which device is behind |
| this wp_tablet_pad. This information may be used to gather additional |
| information about the device, e.g. through libwacom. |
| |
| The format of the path is unspecified, it may be a device node, a |
| sysfs path, or some other identifier. It is up to the client to |
| identify the string provided. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_pad.done event. |
| </description> |
| <arg name="path" type="string" summary="path to local device"/> |
| </event> |
| |
| <event name="buttons"> |
| <description summary="buttons announced"> |
| Sent on wp_tablet_pad initialization to announce the available |
| buttons. |
| |
| This event is sent in the initial burst of events before the |
| wp_tablet_pad.done event. This event is only sent when at least one |
| button is available. |
| </description> |
| <arg name="buttons" type="uint" summary="the number of buttons"/> |
| </event> |
| |
| <event name="done"> |
| <description summary="pad description event sequence complete"> |
| This event signals the end of the initial burst of descriptive |
| events. A client may consider the static description of the pad to |
| be complete and finalize initialization of the pad. |
| </description> |
| </event> |
| |
| <enum name="button_state"> |
| <description summary="physical button state"> |
| Describes the physical state of a button that caused the button |
| event. |
| </description> |
| <entry name="released" value="0" summary="the button is not pressed"/> |
| <entry name="pressed" value="1" summary="the button is pressed"/> |
| </enum> |
| |
| <event name="button"> |
| <description summary="physical button state"> |
| Sent whenever the physical state of a button changes. |
| </description> |
| <arg name="time" type="uint" summary="the time of the event with millisecond granularity"/> |
| <arg name="button" type="uint" summary="the index of the button that changed state"/> |
| <arg name="state" type="uint" enum="button_state"/> |
| </event> |
| |
| <event name="enter"> |
| <description summary="enter event"> |
| Notification that this pad is focused on the specified surface. |
| </description> |
| <arg name="serial" type="uint" summary="serial number of the enter event"/> |
| <arg name="tablet" type="object" interface="zwp_tablet_v2" summary="the tablet the pad is attached to"/> |
| <arg name="surface" type="object" interface="wl_surface" summary="surface the pad is focused on"/> |
| </event> |
| |
| <event name="leave"> |
| <description summary="enter event"> |
| Notification that this pad is no longer focused on the specified |
| surface. |
| </description> |
| <arg name="serial" type="uint" summary="serial number of the leave event"/> |
| <arg name="surface" type="object" interface="wl_surface" summary="surface the pad is no longer focused on"/> |
| </event> |
| |
| <event name="removed"> |
| <description summary="pad removed event"> |
| Sent when the pad has been removed from the system. When a tablet |
| is removed its pad(s) will be removed too. |
| |
| When this event is received, the client must destroy all rings, strips |
| and groups that were offered by this pad, and issue wp_tablet_pad.destroy |
| the pad itself. |
| </description> |
| </event> |
| </interface> |
| </protocol> |