mirror of
				https://github.com/thunderbrewhq/thunderbrew
				synced 2025-11-04 10:16:02 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			1179 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			1179 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0" encoding="UTF-8"?>
 | 
						|
<protocol name="tablet_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.
 | 
						|
  </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 proximity_in 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">
 | 
						|
        A descriptive name for the tablet device.
 | 
						|
 | 
						|
	If the device has no descriptive name, this event is not sent.
 | 
						|
 | 
						|
	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">
 | 
						|
	The USB vendor and product IDs for the tablet device.
 | 
						|
 | 
						|
	If the device has no USB vendor/product ID, this event is not sent.
 | 
						|
	This can happen for virtual devices or non-USB devices, for instance.
 | 
						|
 | 
						|
	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="leave 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>
 |