• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="UTF-8"?>
2<protocol name="tablet_unstable_v1">
3
4  <copyright>
5    Copyright 2014 © Stephen "Lyude" Chandler Paul
6    Copyright 2015-2016 © Red Hat, Inc.
7
8    Permission is hereby granted, free of charge, to any person
9    obtaining a copy of this software and associated documentation files
10    (the "Software"), to deal in the Software without restriction,
11    including without limitation the rights to use, copy, modify, merge,
12    publish, distribute, sublicense, and/or sell copies of the Software,
13    and to permit persons to whom the Software is furnished to do so,
14    subject to the following conditions:
15
16    The above copyright notice and this permission notice (including the
17    next paragraph) shall be included in all copies or substantial
18    portions of the Software.
19
20    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23    NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
24    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
26    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27    SOFTWARE.
28  </copyright>
29
30  <description summary="Wayland protocol for graphics tablets">
31    This description provides a high-level overview of the interplay between
32    the interfaces defined this protocol. For details, see the protocol
33    specification.
34
35    More than one tablet may exist, and device-specifics matter. Tablets are
36    not represented by a single virtual device like wl_pointer. A client
37    binds to the tablet manager object which is just a proxy object. From
38    that, the client requests wp_tablet_manager.get_tablet_seat(wl_seat)
39    and that returns the actual interface that has all the tablets. With
40    this indirection, we can avoid merging wp_tablet into the actual Wayland
41    protocol, a long-term benefit.
42
43    The wp_tablet_seat sends a "tablet added" event for each tablet
44    connected. That event is followed by descriptive events about the
45    hardware; currently that includes events for name, vid/pid and
46    a wp_tablet.path event that describes a local path. This path can be
47    used to uniquely identify a tablet or get more information through
48    libwacom. Emulated or nested tablets can skip any of those, e.g. a
49    virtual tablet may not have a vid/pid. The sequence of descriptive
50    events is terminated by a wp_tablet.done event to signal that a client
51    may now finalize any initialization for that tablet.
52
53    Events from tablets require a tool in proximity. Tools are also managed
54    by the tablet seat; a "tool added" event is sent whenever a tool is new
55    to the compositor. That event is followed by a number of descriptive
56    events about the hardware; currently that includes capabilities,
57    hardware id and serial number, and tool type. Similar to the tablet
58    interface, a wp_tablet_tool.done event is sent to terminate that initial
59    sequence.
60
61    Any event from a tool happens on the wp_tablet_tool interface. When the
62    tool gets into proximity of the tablet, a proximity_in event is sent on
63    the wp_tablet_tool interface, listing the tablet and the surface. That
64    event is followed by a motion event with the coordinates. After that,
65    it's the usual motion, axis, button, etc. events. The protocol's
66    serialisation means events are grouped by wp_tablet_tool.frame events.
67
68    Two special events (that don't exist in X) are down and up. They signal
69    "tip touching the surface". For tablets without real proximity
70    detection, the sequence is: proximity_in, motion, down, frame.
71
72    When the tool leaves proximity, a proximity_out event is sent. If any
73    button is still down, a button release event is sent before this
74    proximity event. These button events are sent in the same frame as the
75    proximity event to signal to the client that the buttons were held when
76    the tool left proximity.
77
78    If the tool moves out of the surface but stays in proximity (i.e.
79    between windows), compositor-specific grab policies apply. This usually
80    means that the proximity-out is delayed until all buttons are released.
81
82    Moving a tool physically from one tablet to the other has no real effect
83    on the protocol, since we already have the tool object from the "tool
84    added" event. All the information is already there and the proximity
85    events on both tablets are all a client needs to reconstruct what
86    happened.
87
88    Some extra axes are normalized, i.e. the client knows the range as
89    specified in the protocol (e.g. [0, 65535]), the granularity however is
90    unknown. The current normalized axes are pressure, distance, and slider.
91
92    Other extra axes are in physical units as specified in the protocol.
93    The current extra axes with physical units are tilt, rotation and
94    wheel rotation.
95
96    Since tablets work independently of the pointer controlled by the mouse,
97    the focus handling is independent too and controlled by proximity.
98    The wp_tablet_tool.set_cursor request sets a tool-specific cursor.
99    This cursor surface may be the same as the mouse cursor, and it may be
100    the same across tools but it is possible to be more fine-grained. For
101    example, a client may set different cursors for the pen and eraser.
102
103    Tools are generally independent of tablets and it is
104    compositor-specific policy when a tool can be removed. Common approaches
105    will likely include some form of removing a tool when all tablets the
106    tool was used on are removed.
107
108    Warning! The protocol described in this file is experimental and
109    backward incompatible changes may be made. Backward compatible changes
110    may be added together with the corresponding interface version bump.
111    Backward incompatible changes are done by bumping the version number in
112    the protocol and interface names and resetting the interface version.
113    Once the protocol is to be declared stable, the 'z' prefix and the
114    version number in the protocol and interface names are removed and the
115    interface version number is reset.
116  </description>
117
118  <interface name="zwp_tablet_manager_v1" version="1">
119    <description summary="controller object for graphic tablet devices">
120      An object that provides access to the graphics tablets available on this
121      system. All tablets are associated with a seat, to get access to the
122      actual tablets, use wp_tablet_manager.get_tablet_seat.
123    </description>
124
125    <request name="get_tablet_seat">
126      <description summary="get the tablet seat">
127	Get the wp_tablet_seat object for the given seat. This object
128	provides access to all graphics tablets in this seat.
129      </description>
130      <arg name="tablet_seat" type="new_id" interface="zwp_tablet_seat_v1"/>
131      <arg name="seat" type="object" interface="wl_seat" summary="The wl_seat object to retrieve the tablets for" />
132    </request>
133
134    <request name="destroy" type="destructor">
135      <description summary="release the memory for the tablet manager object">
136	Destroy the wp_tablet_manager object. Objects created from this
137	object are unaffected and should be destroyed separately.
138      </description>
139    </request>
140  </interface>
141
142  <interface name="zwp_tablet_seat_v1" version="1">
143    <description summary="controller object for graphic tablet devices of a seat">
144      An object that provides access to the graphics tablets available on this
145      seat. After binding to this interface, the compositor sends a set of
146      wp_tablet_seat.tablet_added and wp_tablet_seat.tool_added events.
147    </description>
148
149    <request name="destroy" type="destructor">
150      <description summary="release the memory for the tablet seat object">
151	Destroy the wp_tablet_seat object. Objects created from this
152	object are unaffected and should be destroyed separately.
153      </description>
154    </request>
155
156    <event name="tablet_added">
157      <description summary="new device notification">
158	This event is sent whenever a new tablet becomes available on this
159	seat. This event only provides the object id of the tablet, any
160	static information about the tablet (device name, vid/pid, etc.) is
161	sent through the wp_tablet interface.
162      </description>
163      <arg name="id" type="new_id" interface="zwp_tablet_v1" summary="the newly added graphics tablet"/>
164    </event>
165
166    <event name="tool_added">
167      <description summary="a new tool has been used with a tablet">
168	This event is sent whenever a tool that has not previously been used
169	with a tablet comes into use. This event only provides the object id
170	of the tool; any static information about the tool (capabilities,
171	type, etc.) is sent through the wp_tablet_tool interface.
172      </description>
173      <arg name="id" type="new_id" interface="zwp_tablet_tool_v1" summary="the newly added tablet tool"/>
174    </event>
175  </interface>
176
177  <interface name="zwp_tablet_tool_v1" version="1">
178    <description summary="a physical tablet tool">
179      An object that represents a physical tool that has been, or is
180      currently in use with a tablet in this seat. Each wp_tablet_tool
181      object stays valid until the client destroys it; the compositor
182      reuses the wp_tablet_tool object to indicate that the object's
183      respective physical tool has come into proximity of a tablet again.
184
185      A wp_tablet_tool object's relation to a physical tool depends on the
186      tablet's ability to report serial numbers. If the tablet supports
187      this capability, then the object represents a specific physical tool
188      and can be identified even when used on multiple tablets.
189
190      A tablet tool has a number of static characteristics, e.g. tool type,
191      hardware_serial and capabilities. These capabilities are sent in an
192      event sequence after the wp_tablet_seat.tool_added event before any
193      actual events from this tool. This initial event sequence is
194      terminated by a wp_tablet_tool.done event.
195
196      Tablet tool events are grouped by wp_tablet_tool.frame events.
197      Any events received before a wp_tablet_tool.frame event should be
198      considered part of the same hardware state change.
199    </description>
200
201    <request name="set_cursor">
202      <description summary="set the tablet tool's surface">
203	Sets the surface of the cursor used for this tool on the given
204	tablet. This request only takes effect if the tool is in proximity
205	of one of the requesting client's surfaces or the surface parameter
206	is the current pointer surface. If there was a previous surface set
207	with this request it is replaced. If surface is NULL, the cursor
208	image is hidden.
209
210	The parameters hotspot_x and hotspot_y define the position of the
211	pointer surface relative to the pointer location. Its top-left corner
212	is always at (x, y) - (hotspot_x, hotspot_y), where (x, y) are the
213	coordinates of the pointer location, in surface-local coordinates.
214
215	On surface.attach requests to the pointer surface, hotspot_x and
216	hotspot_y are decremented by the x and y parameters passed to the
217	request. Attach must be confirmed by wl_surface.commit as usual.
218
219	The hotspot can also be updated by passing the currently set pointer
220	surface to this request with new values for hotspot_x and hotspot_y.
221
222	The current and pending input regions of the wl_surface are cleared,
223	and wl_surface.set_input_region is ignored until the wl_surface is no
224	longer used as the cursor. When the use as a cursor ends, the current
225	and pending input regions become undefined, and the wl_surface is
226	unmapped.
227
228	This request gives the surface the role of a cursor. The role
229	assigned by this request is the same as assigned by
230	wl_pointer.set_cursor meaning the same surface can be
231	used both as a wl_pointer cursor and a wp_tablet cursor. If the
232	surface already has another role, it raises a protocol error.
233	The surface may be used on multiple tablets and across multiple
234	seats.
235      </description>
236      <arg name="serial" type="uint" summary="serial of the enter event"/>
237      <arg name="surface" type="object" interface="wl_surface" allow-null="true"/>
238      <arg name="hotspot_x" type="int" summary="surface-local x coordinate"/>
239      <arg name="hotspot_y" type="int" summary="surface-local y coordinate"/>
240    </request>
241
242    <request name="destroy" type="destructor">
243      <description summary="destroy the tool object">
244	This destroys the client's resource for this tool object.
245      </description>
246    </request>
247
248    <enum name="type">
249      <description summary="a physical tool type">
250	Describes the physical type of a tool. The physical type of a tool
251	generally defines its base usage.
252
253	The mouse tool represents a mouse-shaped tool that is not a relative
254	device but bound to the tablet's surface, providing absolute
255	coordinates.
256
257	The lens tool is a mouse-shaped tool with an attached lens to
258	provide precision focus.
259      </description>
260      <entry name="pen" value="0x140" summary="Pen"/>
261      <entry name="eraser" value="0x141" summary="Eraser"/>
262      <entry name="brush" value="0x142" summary="Brush"/>
263      <entry name="pencil" value="0x143" summary="Pencil"/>
264      <entry name="airbrush" value="0x144" summary="Airbrush"/>
265      <entry name="finger" value="0x145" summary="Finger"/>
266      <entry name="mouse" value="0x146" summary="Mouse"/>
267      <entry name="lens" value="0x147" summary="Lens"/>
268    </enum>
269
270    <event name="type">
271      <description summary="tool type">
272	The tool type is the high-level type of the tool and usually decides
273	the interaction expected from this tool.
274
275	This event is sent in the initial burst of events before the
276	wp_tablet_tool.done event.
277      </description>
278      <arg name="tool_type" type="uint" enum="type" summary="the physical tool type"/>
279    </event>
280
281    <event name="hardware_serial">
282      <description summary="unique hardware serial number of the tool">
283	If the physical tool can be identified by a unique 64-bit serial
284	number, this event notifies the client of this serial number.
285
286	If multiple tablets are available in the same seat and the tool is
287	uniquely identifiable by the serial number, that tool may move
288	between tablets.
289
290	Otherwise, if the tool has no serial number and this event is
291	missing, the tool is tied to the tablet it first comes into
292	proximity with. Even if the physical tool is used on multiple
293	tablets, separate wp_tablet_tool objects will be created, one per
294	tablet.
295
296	This event is sent in the initial burst of events before the
297	wp_tablet_tool.done event.
298      </description>
299      <arg name="hardware_serial_hi" type="uint" summary="the unique serial number of the tool, most significant bits"/>
300      <arg name="hardware_serial_lo" type="uint" summary="the unique serial number of the tool, least significant bits"/>
301    </event>
302
303    <event name="hardware_id_wacom">
304      <description summary="hardware id notification in Wacom's format">
305	This event notifies the client of a hardware id available on this tool.
306
307	The hardware id is a device-specific 64-bit id that provides extra
308	information about the tool in use, beyond the wl_tool.type
309	enumeration. The format of the id is specific to tablets made by
310	Wacom Inc. For example, the hardware id of a Wacom Grip
311	Pen (a stylus) is 0x802.
312
313	This event is sent in the initial burst of events before the
314	wp_tablet_tool.done event.
315      </description>
316      <arg name="hardware_id_hi" type="uint" summary="the hardware id, most significant bits"/>
317      <arg name="hardware_id_lo" type="uint" summary="the hardware id, least significant bits"/>
318    </event>
319
320    <enum name="capability">
321      <description summary="capability flags for a tool">
322	Describes extra capabilities on a tablet.
323
324	Any tool must provide x and y values, extra axes are
325	device-specific.
326      </description>
327      <entry name="tilt" value="1" summary="Tilt axes"/>
328      <entry name="pressure" value="2" summary="Pressure axis"/>
329      <entry name="distance" value="3" summary="Distance axis"/>
330      <entry name="rotation" value="4" summary="Z-rotation axis"/>
331      <entry name="slider" value="5" summary="Slider axis"/>
332      <entry name="wheel" value="6" summary="Wheel axis"/>
333    </enum>
334
335    <event name="capability">
336      <description summary="tool capability notification">
337	This event notifies the client of any capabilities of this tool,
338	beyond the main set of x/y axes and tip up/down detection.
339
340	One event is sent for each extra capability available on this tool.
341
342	This event is sent in the initial burst of events before the
343	wp_tablet_tool.done event.
344      </description>
345      <arg name="capability" type="uint" enum="capability" summary="the capability"/>
346    </event>
347
348    <event name="done">
349      <description summary="tool description events sequence complete">
350	This event signals the end of the initial burst of descriptive
351	events. A client may consider the static description of the tool to
352	be complete and finalize initialization of the tool.
353      </description>
354    </event>
355
356    <event name="removed">
357      <description summary="tool removed">
358	This event is sent when the tool is removed from the system and will
359	send no further events. Should the physical tool come back into
360	proximity later, a new wp_tablet_tool object will be created.
361
362	It is compositor-dependent when a tool is removed. A compositor may
363	remove a tool on proximity out, tablet removal or any other reason.
364	A compositor may also keep a tool alive until shutdown.
365
366	If the tool is currently in proximity, a proximity_out event will be
367	sent before the removed event. See wp_tablet_tool.proximity_out for
368	the handling of any buttons logically down.
369
370	When this event is received, the client must wp_tablet_tool.destroy
371	the object.
372      </description>
373    </event>
374
375    <event name="proximity_in">
376      <description summary="proximity in event">
377	Notification that this tool is focused on a certain surface.
378
379	This event can be received when the tool has moved from one surface to
380	another, or when the tool has come back into proximity above the
381	surface.
382
383	If any button is logically down when the tool comes into proximity,
384	the respective button event is sent after the proximity_in event but
385	within the same frame as the proximity_in event.
386      </description>
387      <arg name="serial" type="uint"/>
388      <arg name="tablet" type="object" interface="zwp_tablet_v1" summary="The tablet the tool is in proximity of"/>
389      <arg name="surface" type="object" interface="wl_surface" summary="The current surface the tablet tool is over"/>
390    </event>
391
392    <event name="proximity_out">
393      <description summary="proximity out event">
394	Notification that this tool has either left proximity, or is no
395	longer focused on a certain surface.
396
397	When the tablet tool leaves proximity of the tablet, button release
398	events are sent for each button that was held down at the time of
399	leaving proximity. These events are sent before the proximity_out
400	event but within the same wp_tablet.frame.
401
402	If the tool stays within proximity of the tablet, but the focus
403	changes from one surface to another, a button release event may not
404	be sent until the button is actually released or the tool leaves the
405	proximity of the tablet.
406      </description>
407    </event>
408
409    <event name="down">
410      <description summary="tablet tool is making contact">
411	Sent whenever the tablet tool comes in contact with the surface of the
412	tablet.
413
414	If the tool is already in contact with the tablet when entering the
415	input region, the client owning said region will receive a
416	wp_tablet.proximity_in event, followed by a wp_tablet.down
417	event and a wp_tablet.frame event.
418
419	Note that this event describes logical contact, not physical
420	contact. On some devices, a compositor may not consider a tool in
421	logical contact until a minimum physical pressure threshold is
422	exceeded.
423      </description>
424      <arg name="serial" type="uint"/>
425    </event>
426
427    <event name="up">
428      <description summary="tablet tool is no longer making contact">
429	Sent whenever the tablet tool stops making contact with the surface of
430	the tablet, or when the tablet tool moves out of the input region
431	and the compositor grab (if any) is dismissed.
432
433	If the tablet tool moves out of the input region while in contact
434	with the surface of the tablet and the compositor does not have an
435	ongoing grab on the surface, the client owning said region will
436	receive a wp_tablet.up event, followed by a wp_tablet.proximity_out
437	event and a wp_tablet.frame event. If the compositor has an ongoing
438	grab on this device, this event sequence is sent whenever the grab
439	is dismissed in the future.
440
441	Note that this event describes logical contact, not physical
442	contact. On some devices, a compositor may not consider a tool out
443	of logical contact until physical pressure falls below a specific
444	threshold.
445      </description>
446    </event>
447
448    <event name="motion">
449      <description summary="motion event">
450	Sent whenever a tablet tool moves.
451      </description>
452      <arg name="x" type="fixed" summary="surface-local x coordinate"/>
453      <arg name="y" type="fixed" summary="surface-local y coordinate"/>
454    </event>
455
456    <event name="pressure">
457      <description summary="pressure change event">
458	Sent whenever the pressure axis on a tool changes. The value of this
459	event is normalized to a value between 0 and 65535.
460
461	Note that pressure may be nonzero even when a tool is not in logical
462	contact. See the down and up events for more details.
463      </description>
464      <arg name="pressure" type="uint" summary="The current pressure value"/>
465    </event>
466
467    <event name="distance">
468      <description summary="distance change event">
469	Sent whenever the distance axis on a tool changes. The value of this
470	event is normalized to a value between 0 and 65535.
471
472	Note that distance may be nonzero even when a tool is not in logical
473	contact. See the down and up events for more details.
474      </description>
475      <arg name="distance" type="uint" summary="The current distance value"/>
476    </event>
477
478    <event name="tilt">
479      <description summary="tilt change event">
480	Sent whenever one or both of the tilt axes on a tool change. Each tilt
481	value is in 0.01 of a degree, relative to the z-axis of the tablet.
482	The angle is positive when the top of a tool tilts along the
483	positive x or y axis.
484      </description>
485      <arg name="tilt_x" type="int" summary="The current value of the X tilt axis"/>
486      <arg name="tilt_y" type="int" summary="The current value of the Y tilt axis"/>
487    </event>
488
489    <event name="rotation">
490      <description summary="z-rotation change event">
491	Sent whenever the z-rotation axis on the tool changes. The
492	rotation value is in 0.01 of a degree clockwise from the tool's
493	logical neutral position.
494      </description>
495      <arg name="degrees" type="int" summary="The current rotation of the Z axis"/>
496    </event>
497
498    <event name="slider">
499      <description summary="Slider position change event">
500	Sent whenever the slider position on the tool changes. The
501	value is normalized between -65535 and 65535, with 0 as the logical
502	neutral position of the slider.
503
504	The slider is available on e.g. the Wacom Airbrush tool.
505      </description>
506      <arg name="position" type="int" summary="The current position of slider"/>
507    </event>
508
509    <event name="wheel">
510      <description summary="Wheel delta event">
511	Sent whenever the wheel on the tool emits an event. This event
512	contains two values for the same axis change. The degrees value is
513	in 0.01 of a degree in the same orientation as the
514	wl_pointer.vertical_scroll axis. The clicks value is in discrete
515	logical clicks of the mouse wheel. This value may be zero if the
516	movement of the wheel was less than one logical click.
517
518	Clients should choose either value and avoid mixing degrees and
519	clicks. The compositor may accumulate values smaller than a logical
520	click and emulate click events when a certain threshold is met.
521	Thus, wl_tablet_tool.wheel events with non-zero clicks values may
522	have different degrees values.
523      </description>
524      <arg name="degrees" type="int" summary="The wheel delta in 0.01 of a degree"/>
525      <arg name="clicks" type="int" summary="The wheel delta in discrete clicks"/>
526    </event>
527
528    <enum name="button_state">
529      <description summary="physical button state">
530	Describes the physical state of a button that produced the button event.
531      </description>
532      <entry name="released" value="0" summary="button is not pressed"/>
533      <entry name="pressed" value="1" summary="button is pressed"/>
534    </enum>
535
536    <event name="button">
537      <description summary="button event">
538	Sent whenever a button on the tool is pressed or released.
539
540	If a button is held down when the tool moves in or out of proximity,
541	button events are generated by the compositor. See
542	wp_tablet_tool.proximity_in and wp_tablet_tool.proximity_out for
543	details.
544      </description>
545      <arg name="serial" type="uint"/>
546      <arg name="button" type="uint" summary="The button whose state has changed"/>
547      <arg name="state" type="uint" enum="button_state" summary="Whether the button was pressed or released"/>
548    </event>
549
550    <event name="frame">
551      <description summary="frame event">
552	Marks the end of a series of axis and/or button updates from the
553	tablet. The Wayland protocol requires axis updates to be sent
554	sequentially, however all events within a frame should be considered
555	one hardware event.
556      </description>
557      <arg name="time" type="uint" summary="The time of the event with millisecond granularity"/>
558    </event>
559
560    <enum name="error">
561      <entry name="role" value="0" summary="given wl_surface has another role"/>
562    </enum>
563  </interface>
564
565  <interface name="zwp_tablet_v1" version="1">
566    <description summary="graphics tablet device">
567      The wp_tablet interface represents one graphics tablet device. The
568      tablet interface itself does not generate events; all events are
569      generated by wp_tablet_tool objects when in proximity above a tablet.
570
571      A tablet has a number of static characteristics, e.g. device name and
572      pid/vid. These capabilities are sent in an event sequence after the
573      wp_tablet_seat.tablet_added event. This initial event sequence is
574      terminated by a wp_tablet.done event.
575    </description>
576
577    <request name="destroy" type="destructor">
578      <description summary="destroy the tablet object">
579	This destroys the client's resource for this tablet object.
580      </description>
581    </request>
582
583    <event name="name">
584      <description summary="tablet device name">
585	This event is sent in the initial burst of events before the
586	wp_tablet.done event.
587      </description>
588      <arg name="name" type="string" summary="the device name"/>
589    </event>
590
591    <event name="id">
592      <description summary="tablet device USB vendor/product id">
593	This event is sent in the initial burst of events before the
594	wp_tablet.done event.
595      </description>
596      <arg name="vid" type="uint" summary="USB vendor id"/>
597      <arg name="pid" type="uint" summary="USB product id"/>
598    </event>
599
600    <event name="path">
601      <description summary="path to the device">
602	A system-specific device path that indicates which device is behind
603	this wp_tablet. This information may be used to gather additional
604	information about the device, e.g. through libwacom.
605
606	A device may have more than one device path. If so, multiple
607	wp_tablet.path events are sent. A device may be emulated and not
608	have a device path, and in that case this event will not be sent.
609
610	The format of the path is unspecified, it may be a device node, a
611	sysfs path, or some other identifier. It is up to the client to
612	identify the string provided.
613
614	This event is sent in the initial burst of events before the
615	wp_tablet.done event.
616      </description>
617      <arg name="path" type="string" summary="path to local device"/>
618    </event>
619
620    <event name="done">
621      <description summary="tablet description events sequence complete">
622	This event is sent immediately to signal the end of the initial
623	burst of descriptive events. A client may consider the static
624	description of the tablet to be complete and finalize initialization
625	of the tablet.
626      </description>
627    </event>
628
629    <event name="removed">
630      <description summary="tablet removed event">
631	Sent when the tablet has been removed from the system. When a tablet
632	is removed, some tools may be removed.
633
634	When this event is received, the client must wp_tablet.destroy
635	the object.
636      </description>
637    </event>
638  </interface>
639
640</protocol>
641