shm: Add request for resizing pools
[profile/ivi/wayland.git] / protocol / wayland.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <protocol name="wayland">
3
4   <copyright>
5     Copyright © 2008-2011 Kristian Høgsberg
6     Copyright © 2010-2011 Intel Corporation
7
8     Permission to use, copy, modify, distribute, and sell this
9     software and its documentation for any purpose is hereby granted
10     without fee, provided that the above copyright notice appear in
11     all copies and that both that copyright notice and this permission
12     notice appear in supporting documentation, and that the name of
13     the copyright holders not be used in advertising or publicity
14     pertaining to distribution of the software without specific,
15     written prior permission.  The copyright holders make no
16     representations about the suitability of this software for any
17     purpose.  It is provided "as is" without express or implied
18     warranty.
19
20     THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
21     SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
22     FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
23     SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24     WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
25     AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
26     ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
27     THIS SOFTWARE.
28   </copyright>
29
30   <interface name="wl_display" version="1">
31     <description summary="core global object">
32       The core global object.  This is a special singleton object.  It
33       is used for internal wayland protocol features.
34     </description>
35     <request name="bind">
36       <description summary="bind an object to the display">
37         Binds a new, client-created object to the server using @name as
38         the identifier.
39       </description>
40       <arg name="name" type="uint" summary="unique number id for object"/>
41       <arg name="interface" type="string"/>
42       <arg name="version" type="uint"/>
43       <arg name="id" type="new_id" interface="wl_object"/>
44     </request>
45
46     <request name="sync">
47       <description summary="asynchronous roundtrip">
48         The sync request asks the server to invoke the 'done' request
49         on the provided wl_callback object.  Since requests are
50         handled in-order, this can be used as a barrier to ensure all
51         previous requests have been handled.
52       </description>
53       <arg name="callback" type="new_id" interface="wl_callback"/>
54     </request>
55
56     <event name="error">
57       <description summary="fatal error event">
58         The error event is sent out when a fatal (non-recoverable)
59         error has occurred.
60       </description>
61       <arg name="object_id" type="object" interface="wl_object"/>
62       <arg name="code" type="uint"/>
63       <arg name="message" type="string"/>
64     </event>
65
66     <enum name="error">
67       <description summary="global error values">
68         These errors are global and can be emitted in response to any
69         server request.
70       </description>
71       <entry name="invalid_object" value="0"
72              summary="server couldn't find object"/>
73       <entry name="invalid_method" value="1"
74              summary="method doesn't exist on the specified interface"/>
75       <entry name="no_memory" value="2"
76              summary="server is out of memory"/>
77     </enum>
78
79     <event name="global">
80       <description summary="announce global object">
81         Notify the client of global objects.  These are objects that
82         are created by the server.  Globals are published on the
83         initial client connection sequence, upon device hotplugs,
84         device disconnects, reconfiguration or other events.  A client
85         can 'bind' to a global object by using the bind request.  This
86         creates a client side handle that lets the object emit events
87         to the client and lets the client invoke requests on the
88         object.
89       </description>
90       <arg name="name" type="uint"/>
91       <arg name="interface" type="string"/>
92       <arg name="version" type="uint"/>
93     </event>
94
95     <event name="global_remove">
96       <description summary="announce removal of global object">
97         Notify the client of removed global objects.
98       </description>
99       <arg name="name" type="uint"/>
100     </event>
101
102     <event name="delete_id">
103       <description summary="acknowledge object id deletion">
104         Server has deleted the id and client can now reuse it.
105       </description>
106       <arg name="id" type="uint" />
107     </event>
108   </interface>
109
110   <interface name="wl_callback" version="1">
111     <event name="done">
112       <arg name="serial" type="uint"/>
113     </event>
114   </interface>
115
116   <interface name="wl_compositor" version="1">
117     <description summary="the compositor singleton">
118       A compositor.  This object is a singleton global.  The
119       compositor is in charge of combining the contents of multiple
120       surfaces into one displayable output.
121     </description>
122
123     <request name="create_surface">
124       <description summary="create new surface">
125         Ask the compositor to create a new surface.
126       </description>
127       <arg name="id" type="new_id" interface="wl_surface"/>
128     </request>
129
130     <request name="create_region">
131       <description summary="create new region">
132         Ask the compositor to create a new region.
133       </description>
134       <arg name="id" type="new_id" interface="wl_region"/>
135     </request>
136   </interface>
137
138   <interface name="wl_shm_pool" version="1">
139     <description summary="a shared memory pool">
140       The wl_shm_pool object encapsulates a piece of memory shared
141       between the compsitor and client.  Through the wl_shm_pool
142       object, the client can allocate shared memory wl_buffer objects.
143       The objects will share the same underlying mapped memory.
144       Reusing the mapped memory avoids the setup/teardown overhead and
145       is useful when interactively resizing a surface or for many
146       small buffers.
147     </description>
148
149     <request name="create_buffer">
150       <description summary="create wl_buffer from pool">
151         Create a wl_buffer from the pool.  The buffer is created a
152         offset bytes into the pool and has width and height as
153         specified.  The stride arguments specifies the number of bytes
154         from beginning of one row to the beginning of the next.  The
155         format is the pixel format of the buffer and must be one of
156         those advertised through the wl_shm.format event.
157
158         A buffer will keep a reference to the pool it was created from
159         so it is valid to destroy the pool immediatedly after creating
160         a buffer from it.
161       </description>
162
163       <arg name="id" type="new_id" interface="wl_buffer"/>
164       <arg name="offset" type="int"/>
165       <arg name="width" type="int"/>
166       <arg name="height" type="int"/>
167       <arg name="stride" type="int"/>
168       <arg name="format" type="uint"/>
169     </request>
170
171     <request name="destroy" type="destructor">
172       <description summary="destroy the pool">
173         Destroy the pool.
174       </description>
175     </request>
176
177     <request name="resize">
178       <description summary="change the size of the pool mapping">
179         This request will cause the server to remap the backing memory
180         for the pool from the fd passed when the pool was creating but
181         using the new size.
182       </description>
183
184       <arg name="size" type="int"/>
185     </request>
186   </interface>
187
188   <interface name="wl_shm" version="1">
189     <description summary="shared memory support">
190       Support for shared memory buffers.
191     </description>
192
193     <enum name="error">
194       <entry name="invalid_format" value="0"/>
195       <entry name="invalid_stride" value="1"/>
196       <entry name="invalid_fd" value="2"/>
197     </enum>
198
199     <enum name="format">
200       <entry name="argb8888" value="0"/>
201       <entry name="xrgb8888" value="1"/>
202     </enum>
203
204     <request name="create_pool">
205       <description summary="create a shm pool">
206         This creates wl_shm_pool object, which can be used to create
207         shared memory based wl_buffer objects.  The server will mmap
208         size bytes of the passed fd, to use as backing memory for then
209         pool.
210       </description>
211
212       <arg name="id" type="new_id" interface="wl_shm_pool"/>
213       <arg name="fd" type="fd"/>
214       <arg name="size" type="int"/>
215     </request>
216
217     <event name="format">
218       <arg name="format" type="uint"/>
219     </event>
220   </interface>
221
222   <interface name="wl_buffer" version="1">
223     <description summary="content for a wl_surface">
224       A buffer provides the content for a wl_surface.  Buffers are
225       created through factory interfaces such as wl_drm, wl_shm or
226       similar.  It has a width and a height and can be attached to a
227       wl_surface, but the mechanism by which a client provides and
228       updates the contents is defined by the buffer factory interface
229     </description>
230
231     <request name="destroy" type="destructor">
232       <description summary="destroy a buffer">
233         Destroy a buffer.  This will invalidate the object id.
234       </description>
235     </request>
236
237     <event name="release">
238       <description summary="compositor releases buffer">
239         Sent when an attached buffer is no longer used by the compositor.
240       </description>
241     </event>
242   </interface>
243
244
245   <interface name="wl_data_offer" version="1">
246     <request name="accept">
247       <description summary="accept one of the offered mime-types">
248         Indicate that the client can accept the given mime-type, or
249         NULL for not accepted.  Use for feedback during drag and drop.
250       </description>
251
252       <arg name="serial" type="uint"/>
253       <arg name="type" type="string"/>
254     </request>
255
256     <request name="receive">
257       <arg name="mime_type" type="string"/>
258       <arg name="fd" type="fd"/>
259     </request>
260
261     <request name="destroy" type="destructor"/>
262
263     <event name="offer">
264       <description summary="advertise offered mime-type">
265         Sent immediately after creating the wl_data_offer object.  One
266         event per offered mime type.
267       </description>
268
269       <arg name="type" type="string"/>
270     </event>
271   </interface>
272
273   <interface name="wl_data_source" version="1">
274     <request name="offer">
275       <description summary="add an offered mime type">
276         This request adds a mime-type to the set of mime-types
277         advertised to targets.  Can be called several times to offer
278         multiple types.
279       </description>
280       <arg name="type" type="string"/>
281     </request>
282
283     <request name="destroy" type="destructor">
284       <description summary="destroy the data source">
285         Destroy the data source.
286       </description>
287     </request>
288
289     <event name="target">
290       <description summary="a target accepts an offered mime-type">
291         Sent when a target accepts pointer_focus or motion events.  If
292         a target does not accept any of the offered types, type is NULL.
293       </description>
294
295       <arg name="mime_type" type="string"/>
296     </event>
297
298     <event name="send">
299       <description summary="send the data">
300         Request for data from another client.  Send the data as the
301         specified mime-type over the passed fd, then close the fd.
302       </description>
303
304       <arg name="mime_type" type="string"/>
305       <arg name="fd" type="fd"/>
306     </event>
307
308     <event name="cancelled">
309       <description summary="selection was cancelled">
310         Another selection became active.
311       </description>
312     </event>
313
314   </interface>
315
316   <interface name="wl_data_device" version="1">
317     <request name="start_drag">
318       <description summary="start drag and drop operation">
319         This request asks the compositor to start a drag and drop
320         operation on behalf of the client.  The source argument is the
321         data source that provides the data for the eventual data
322         transfer.  The origin surface is the surface where the drag
323         originates and the client must have an active implicit grab
324         that matches the serial.  The icon surface is an optional
325         (can be nil) surface that provides an icon to be moved around
326         with the cursor.  Initially, the top-left corner of the icon
327         surface is placed at the cursor hotspot, but subsequent
328         surface.attach request can move the relative position.
329       </description>
330       <arg name="source" type="object" interface="wl_data_source"/>
331       <arg name="origin" type="object" interface="wl_surface"/>
332       <arg name="icon" type="object" interface="wl_surface"/>
333       <arg name="serial" type="uint"/>
334     </request>
335
336     <request name="set_selection">
337       <arg name="source" type="object" interface="wl_data_source"/>
338       <arg name="serial" type="uint"/>
339     </request>
340
341     <event name="data_offer">
342       <description summary="introduce a new wl_data_offer">
343         The data_offer event introduces a new wl_data_offer object,
344         which will subsequently be used in either the
345         data_device.enter event (for drag and drop) or the
346         data_device.selection event (for selections).  Immediately
347         following the data_device_data_offer event, the new data_offer
348         object will send out data_offer.offer events to describe the
349         mime-types it offers.
350       </description>
351
352       <arg name="id" type="new_id" interface="wl_data_offer"/>
353     </event>
354
355     <event name="enter">
356       <arg name="serial" type="uint"/>
357       <arg name="surface" type="object" interface="wl_surface"/>
358       <arg name="x" type="fixed"/>
359       <arg name="y" type="fixed"/>
360       <arg name="id" type="object" interface="wl_data_offer"/>
361     </event>
362
363     <event name="leave"/>
364
365     <event name="motion">
366       <arg name="time" type="uint"/>
367       <arg name="x" type="fixed"/>
368       <arg name="y" type="fixed"/>
369     </event>
370
371     <event name="drop"/>
372
373     <event name="selection">
374       <description summary="advertise new selection">
375         The selection event is sent out to notify the client of a new
376         wl_data_offer for the selection for this device.  The
377         data_device.data_offer and the data_offer.offer events are
378         sent out immediately before this event to introduce the data
379         offer object.  The selection event is sent to a client
380         immediately before receiving keyboard focus and when a new
381         selection is set while the client has keyboard focus.  The
382         data_offer is valid until a new data_offer or NULL is received
383         or until the client loses keyboard focus.
384       </description>
385       <arg name="id" type="object" interface="wl_data_offer"/>
386     </event>
387   </interface>
388
389   <interface name="wl_data_device_manager" version="1">
390     <request name="create_data_source">
391       <arg name="id" type="new_id" interface="wl_data_source"/>
392     </request>
393
394     <request name="get_data_device">
395       <arg name="id" type="new_id" interface="wl_data_device"/>
396       <arg name="seat" type="object" interface="wl_seat"/>
397     </request>
398   </interface>
399
400   <interface name="wl_shell" version="1">
401     <request name="get_shell_surface">
402       <arg name="id" type="new_id" interface="wl_shell_surface"/>
403       <arg name="surface" type="object" interface="wl_surface"/>
404     </request>
405   </interface>
406
407   <interface name="wl_shell_surface" version="1">
408
409     <description summary="desktop style meta data interface">
410       An interface implemented by a wl_surface.  On server side the
411       object is automatically destroyed when the related wl_surface is
412       destroyed.  On client side, wl_shell_surface_destroy() must be
413       called before destroying the wl_surface object.
414     </description>
415
416     <request name="pong">
417       <description summary="respond to a ping event">
418         A client must respond to a ping event with a pong request or
419         the client may be deemed unresponsive.
420       </description>
421       <arg name="serial" type="uint"/>
422     </request>
423
424     <request name="move">
425       <arg name="seat" type="object" interface="wl_seat"/>
426       <arg name="serial" type="uint"/>
427     </request>
428
429     <enum name="resize">
430       <entry name="none" value="0"/>
431       <entry name="top" value="1"/>
432       <entry name="bottom" value="2"/>
433       <entry name="left" value="4"/>
434       <entry name="top_left" value="5"/>
435       <entry name="bottom_left" value="6"/>
436       <entry name="right" value="8"/>
437       <entry name="top_right" value="9"/>
438       <entry name="bottom_right" value="10"/>
439     </enum>
440
441     <request name="resize">
442       <arg name="seat" type="object" interface="wl_seat"/>
443       <arg name="serial" type="uint"/>
444       <arg name="edges" type="uint"/>
445     </request>
446
447     <request name="set_toplevel">
448       <description summary="make the surface a top level surface">
449         Make the surface a toplevel window.
450       </description>
451     </request>
452
453     <enum name="transient">
454       <entry name="inactive" value="0x1" summary="do not set keyboard focus"/>
455     </enum>
456
457     <request name="set_transient">
458       <description summary="make the surface a transient surface">
459         Map the surface relative to an existing surface. The x and y
460         arguments specify the locations of the upper left corner of
461         the surface relative to the upper left corner of the parent
462         surface.  The flags argument controls overflow/clipping
463         behaviour when the surface would intersect a screen edge,
464         panel or such.  And possibly whether the offset only
465         determines the initial position or if the surface is locked to
466         that relative position during moves.
467       </description>
468
469       <arg name="parent" type="object" interface="wl_shell_surface"/>
470       <arg name="x" type="int"/>
471       <arg name="y" type="int"/>
472       <arg name="flags" type="uint"/>
473     </request>
474
475     <request name="set_fullscreen">
476       <description summary="make the surface a fullscreen surface">
477         Map the surface as a fullscreen surface. If an output parameter is
478         given then the surface will be made fullscreen on that output. If the
479         client does not specify the output then the compositor will apply its
480         policy - usually choosing the output on which the surface has the
481         biggest surface area.
482
483         The client may specify a method to resolve a size conflict between the
484         output size and the surface size - this is provided through the
485         fullscreen_method parameter.
486
487         The framerate parameter is used only when the fullscreen_method is set
488         to "driver", to indicate the preferred framerate. framerate=0 indicates
489         that the app does not care about framerate.  The framerate is
490         specified in mHz, that is framerate of 60000 is 60Hz.
491
492         The compositor must reply to this request with a configure event with
493         the dimensions for the output on which the surface will be made fullscreen.
494       </description>
495       <arg name="method" type="uint"/>
496       <arg name="framerate" type="uint"/>
497       <arg name="output" type="object" interface="wl_output"/>
498     </request>
499
500     <enum name="fullscreen_method">
501       <description summary="different method to set the surface fullscreen">
502         Hints to indicate compositor how to deal with a conflict between the
503         dimensions for the surface and the dimensions of the output. As a hint
504         the compositor is free to ignore this parameter.
505
506         "default" The client has no preference on fullscreen behavior,
507         policies are determined by compositor.
508
509         "scale" The client prefers scaling by the compositor. Scaling would
510         always preserve surface's aspect ratio with surface centered on the
511         output
512
513         "driver" The client wants to switch video mode to the smallest mode
514         that can fit the client buffer. If the sizes do not match the
515         compositor must add black borders.
516
517         "fill" The surface is centered on the output on the screen with no
518         scaling. If the surface is of insufficient size the compositor must
519         add black borders.
520       </description>
521       <entry name="default" value="0"/>
522       <entry name="scale" value="1"/>
523       <entry name="driver" value="2"/>
524       <entry name="fill" value="3"/>
525     </enum>
526
527     <request name="set_popup">
528       <description summary="make the surface a popup surface">
529         Popup surfaces.  Will switch an implicit grab into
530         owner-events mode, and grab will continue after the implicit
531         grab ends (button released).  Once the implicit grab is over,
532         the popup grab continues until the window is destroyed or a
533         mouse button is pressed in any other clients window.  A click
534         in any of the clients surfaces is reported as normal, however,
535         clicks in other clients surfaces will be discarded and trigger
536         the callback.
537
538         TODO: Grab keyboard too, maybe just terminate on any click
539         inside or outside the surface?
540       </description>
541
542       <arg name="seat" type="object" interface="wl_seat"/>
543       <arg name="serial" type="uint"/>
544       <arg name="parent" type="object" interface="wl_shell_surface"/>
545       <arg name="x" type="int"/>
546       <arg name="y" type="int"/>
547       <arg name="flags" type="uint"/>
548     </request>
549
550     <request name="set_maximized">
551       <description summary="make the surface a maximized surface">
552         A request from the client to notify the compositor the maximized
553         operation. The compositor will reply with a configure event telling
554         the expected new surface size. The operation is completed on the
555         next buffer attach to this surface.
556         A maximized client will fill the fullscreen of the output it is bound
557         to, except the panel area. This is the main difference between
558         a maximized shell surface and a fullscreen shell surface.
559       </description>
560       <arg name="output" type="object" interface="wl_output"/>
561     </request>
562
563     <request name="set_title">
564       <description summary="set surface title">
565       </description>
566       <arg name="title" type="string"/>
567     </request>
568
569     <request name="set_class">
570       <description summary="set surface class">
571         The surface class identifies the general class of applications
572         to which the surface belongs.  The class is the file name of
573         the applications .desktop file (absolute path if non-standard
574         location). 
575       </description>
576       <arg name="class_" type="string"/>
577     </request>
578
579     <event name="ping">
580       <description summary="ping client">
581         Ping a client to check if it is receiving events and sending
582         requests. A client is expected to reply with a pong request.
583       </description>
584       <arg name="serial" type="uint"/>
585     </event>
586
587     <event name="configure">
588       <description summary="suggest resize">
589         The configure event asks the client to resize its surface.
590         The size is a hint, in the sense that the client is free to
591         ignore it if it doesn't resize, pick a smaller size (to
592         satisfy aspect ration or resize in steps of NxM pixels).  The
593         client is free to dismiss all but the last configure event it
594         received.
595       </description>
596
597       <arg name="edges" type="uint"/>
598       <arg name="width" type="int"/>
599       <arg name="height" type="int"/>
600     </event>
601
602     <event name="popup_done">
603       <description summary="popup interaction is done">
604         The popup_done event is sent out when a popup grab is broken,
605         that is, when the users clicks a surface that doesn't belong
606         to the client owning the popup surface.
607       </description>
608     </event>
609   </interface>
610
611   <interface name="wl_surface" version="1">
612     <description summary="an onscreen surface">
613       A surface.  This is an image that is displayed on the screen.
614       It has a location, size and pixel contents.
615     </description>
616
617     <request name="destroy" type="destructor">
618       <description summary="delete surface">
619         Deletes the surface and invalidates its object id.
620       </description>
621     </request>
622
623     <request name="attach">
624       <description summary="set the surface contents">
625         Copy the contents of a buffer into this surface. The x and y
626         arguments specify the location of the new buffers upper left
627         corner, relative to the old buffers upper left corner.
628       </description>
629
630       <arg name="buffer" type="object" interface="wl_buffer"/>
631       <arg name="x" type="int"/>
632       <arg name="y" type="int"/>
633     </request>
634
635     <request name="damage">
636       <description summary="mark part of the surface damaged">
637         After attaching a new buffer, this request is used to describe
638         the regions where the new buffer is different from the
639         previous buffer and needs to be repainted.  Coordinates are
640         relative to the new buffer.
641       </description>
642
643       <arg name="x" type="int"/>
644       <arg name="y" type="int"/>
645       <arg name="width" type="int"/>
646       <arg name="height" type="int"/>
647     </request>
648
649     <request name="frame">
650       <description summary="request repaint feedback">
651         Request notification when the next frame is displayed.  Useful
652         for throttling redrawing operations, and driving animations.
653         The notification will only be posted for one frame unless
654         requested again.
655       </description>
656
657       <arg name="callback" type="new_id" interface="wl_callback"/>
658     </request>
659
660     <request name="set_opaque_region">
661       <description summary="set opaque region">
662         This requests sets the region of the surface that contain
663         opaque content.  The opaque region is an optimization hint for
664         the compositor that lets it optimize out redrawing of content
665         behind opaque regions.  Setting an opaque region is not
666         required for correct behaviour, but marking transparent
667         content as opaque will result in repaint artifacts.
668
669         The region will be clipped to the extents of the current
670         surface size.  Setting the region has copy semantics, and the
671         region object can be destroyed immediately after setting the
672         opaque region.  If a buffer of a different size is attached or
673         if a nil region is set, the opaque region will revert back to
674         default.  The default opaque region is empty.
675       </description>
676
677       <arg name="region" type="object" interface="wl_region"/>
678     </request>
679
680     <request name="set_input_region">
681       <description summary="set input region">
682         This requests sets the region of the surface that can receive
683         pointer and touch events.  The region will be clipped to the
684         extents of the current surface size.  Setting the region has
685         copy semantics, and the region object can be destroyed
686         immediately after setting the input region.  If a buffer of a
687         different size is attached or if a nil region is passed, the
688         input region will revert back to default.  The default input
689         region is the entire surface.
690       </description>
691
692       <arg name="region" type="object" interface="wl_region"/>
693     </request>
694
695     <event name="enter">
696       <description summary="surface enters an output">
697         This is emitted whenever a surface's creation, movement, or resizing
698         results in some part of it being within the scanout region of an
699         output.
700       </description>
701       <arg name="output" type="object" interface="wl_output"/>
702     </event>
703
704     <event name="leave">
705       <description summary="surface leaves an output">
706         This is emitted whenever a surface's creation, movement, or resizing
707         results in it no longer having any part of it within the scanout region
708         of an output.
709       </description>
710       <arg name="output" type="object" interface="wl_output"/>
711     </event>
712   </interface>
713
714   <interface name="wl_seat" version="1">
715     <description summary="seat">
716       A group of keyboards, pointer (mice, for example) and touch
717       devices . This object is published as a global during start up,
718       or when such a device is hot plugged.  A seat typically has a
719       pointer and maintains a keyboard_focus and a pointer_focus.
720     </description>
721
722     <enum name="capability">
723       <description summary="seat capability bitmask">
724         This is a bitmask of capabilities this seat has; if a member is
725         set, then it is present on the seat.
726       </description>
727       <entry name="pointer" value="1" summary="wl_pointer"/>
728       <entry name="keyboard" value="2" summary="wl_keyboard"/>
729       <entry name="touch" value="4" summary="wl_touch"/>
730     </enum>
731
732
733     <event name="capabilities">
734       <description summary="seat capabilities changed">
735         This is emitted whenever a seat gains or loses the pointer,
736         keyboard or touch capabilities.  The argument is a wl_seat_caps_mask
737         enum containing the complete set of capabilities this seat has.
738       </description>
739       <arg name="capabilities" type="uint"/>
740     </event>
741
742     <request name="get_pointer">
743       <description summary="return pointer object">
744         The ID provided will be initialized to the wl_pointer interface
745         for this seat.
746       </description>
747       <arg name="id" type="new_id" interface="wl_pointer"/>
748     </request>
749
750     <request name="get_keyboard">
751       <description summary="return pointer object">
752         The ID provided will be initialized to the wl_keyboard interface
753         for this seat.
754       </description>
755       <arg name="id" type="new_id" interface="wl_keyboard"/>
756     </request>
757
758     <request name="get_touch">
759       <description summary="return pointer object">
760         The ID provided will be initialized to the wl_touch interface
761         for this seat.
762       </description>
763       <arg name="id" type="new_id" interface="wl_touch"/>
764     </request>
765   </interface>
766
767   <interface name="wl_pointer" version="1">
768     <request name="attach">
769       <description summary="set the pointer image">
770         Set the pointer's image.  This request only takes effect if
771         the pointer focus for this device is one of the requesting
772         clients surfaces.
773       </description>
774
775       <arg name="serial" type="uint"/>
776       <arg name="buffer" type="object" interface="wl_buffer"/>
777       <arg name="hotspot_x" type="int"/>
778       <arg name="hotspot_y" type="int"/>
779     </request>
780
781     <event name="enter">
782       <description summary="enter event">
783         Notification that this seat's pointer is focused on a certain
784         surface. When an seat's focus enters a surface, the pointer image
785         is undefined and a client should respond to this event by setting
786         an appropriate pointer image.
787       </description>
788
789       <arg name="serial" type="uint"/>
790       <arg name="surface" type="object" interface="wl_surface"/>
791       <arg name="surface_x" type="fixed"/>
792       <arg name="surface_y" type="fixed"/>
793     </event>
794
795     <event name="leave">
796       <description summary="leave event">
797       </description>
798       <arg name="serial" type="uint"/>
799       <arg name="surface" type="object" interface="wl_surface"/>
800     </event>
801
802     <event name="motion">
803       <description summary="pointer motion event">
804         Notification of pointer location change. The arguments surface_[xy]
805         are the location relative to the focused surface.
806       </description>
807
808       <arg name="time" type="uint"/>
809       <arg name="surface_x" type="fixed"/>
810       <arg name="surface_y" type="fixed"/>
811     </event>
812
813     <event name="button">
814       <description summary="pointer button event">
815         Mouse button click and release notifications.  The location
816         of the click is given by the last motion or pointer_focus event.
817       </description>
818
819       <arg name="serial" type="uint"/>
820       <arg name="time" type="uint"/>
821       <arg name="button" type="uint"/>
822       <arg name="state" type="uint"/>
823     </event>
824
825     <enum name="axis">
826       <description summary="axis types"/>
827       <entry name="vertical_scroll" value="0"/>
828       <entry name="horizontal_scroll" value="1"/>
829     </enum>
830
831     <event name="axis">
832       <description summary="axis event">
833         Scroll and other axis notifications.
834       </description>
835
836       <arg name="time" type="uint"/>
837       <arg name="axis" type="uint"/>
838       <arg name="value" type="int"/>
839     </event>
840   </interface>
841
842   <interface name="wl_keyboard" version="1">
843     <description summary="keyboard input device">
844     </description>
845
846     <event name="enter">
847       <arg name="serial" type="uint"/>
848       <arg name="surface" type="object" interface="wl_surface"/>
849       <arg name="keys" type="array"/>
850     </event>
851
852     <event name="leave">
853       <arg name="serial" type="uint"/>
854       <arg name="surface" type="object" interface="wl_surface"/>
855     </event>
856
857     <event name="key">
858       <description summary="key event">
859         A key was pressed or released.
860       </description>
861
862       <arg name="serial" type="uint"/>
863       <arg name="time" type="uint"/>
864       <arg name="key" type="uint"/>
865       <arg name="state" type="uint"/>
866     </event>
867   </interface>
868
869   <interface name="wl_touch" version="1">
870     <description summary="touch screen input device">
871     </description>
872
873     <event name="down">
874       <arg name="serial" type="uint"/>
875       <arg name="time" type="uint"/>
876       <arg name="surface" type="object" interface="wl_surface"/>
877       <arg name="id" type="int" />
878       <arg name="x" type="fixed" />
879       <arg name="y" type="fixed" />
880     </event>
881
882     <event name="up">
883       <arg name="serial" type="uint"/>
884       <arg name="time" type="uint"/>
885       <arg name="id" type="int" />
886     </event>
887
888     <event name="motion">
889       <arg name="time" type="uint"/>
890       <arg name="id" type="int" />
891       <arg name="x" type="fixed" />
892       <arg name="y" type="fixed" />
893     </event>
894
895     <event name="frame">
896       <description summary="end of touch frame event">
897         Indicates the end of a contact point list.
898       </description>
899     </event>
900
901     <event name="cancel">
902       <description summary="touch session cancelled">
903         Sent if the compositor decides the touch stream is a global
904         gesture. No further events are sent to the clients from that
905         particular gesture.
906       </description>
907     </event>
908   </interface>
909
910
911   <interface name="wl_output" version="1">
912     <description summary="compositor output region">
913       An output describes part of the compositor geometry.  The
914       compositor work in the 'compositor coordinate system' and an
915       output corresponds to rectangular area in that space that is
916       actually visible.  This typically corresponds to a monitor that
917       displays part of the compositor space.  This object is published
918       as global during start up, or when a screen is hot plugged.
919     </description>
920
921     <enum name="subpixel">
922       <entry name="unknown" value="0"/>
923       <entry name="none" value="1"/>
924       <entry name="horizontal_rgb" value="2"/>
925       <entry name="horizontal_bgr" value="3"/>
926       <entry name="vertical_rgb" value="4"/>
927       <entry name="vertical_bgr" value="5"/>
928     </enum>
929
930     <event name="geometry">
931       <description summary="properties of the output"/>
932       <arg name="x" type="int"
933            summary="x position within the global compositor space"/>
934       <arg name="y" type="int"
935            summary="y position within the global compositor space"/>
936       <arg name="physical_width" type="int"
937            summary="width in milimeters of the output"/>
938       <arg name="physical_height" type="int"
939            summary="height in milimeters of the output"/>
940       <arg name="subpixel" type="int"
941            summary="subpixel orientation of the output"/>
942       <arg name="make" type="string"
943            summary="textual description of the manufacturer"/>
944       <arg name="model" type="string"
945            summary="textual description of the model"/>
946     </event>
947
948     <enum name="mode">
949       <description summary="values for the flags bitfield in the mode event"/>
950       <entry name="current" value="0x1"
951              summary="indicates this is the current mode"/>
952       <entry name="preferred" value="0x2"
953              summary="indicates this is the preferred mode"/>
954     </enum>
955       
956     <event name="mode">
957       <description summary="advertise available modes for the output">
958         The mode event describes an available mode for the output.
959         The event is sent when binding to the output object and there
960         will always be one mode, the current mode.  The event is sent
961         again if an output changes mode, for the mode that is now
962         current.  In other words, the current mode is always the last
963         mode that was received with the current flag set.
964       </description>
965       <arg name="flags" type="uint" summary="mask of wl_output_mode flags"/>
966       <arg name="width" type="int" summary="width of the mode in pixels"/>
967       <arg name="height" type="int" summary="height of the mode in pixels"/>
968       <arg name="refresh" type="int" summary="vertical refresh rate in mHz"/>
969     </event>
970   </interface>
971
972   <interface name="wl_region" version="1">
973     <description summary="region interface">
974       Region.
975     </description>
976
977     <request name="destroy" type="destructor">
978       <description summary="destroy region">
979         Destroy the region.  This will invalidate the object id.
980       </description>
981     </request>
982
983     <request name="add">
984       <description summary="add rectangle to region">
985         Add the specified rectangle to the region
986       </description>
987
988       <arg name="x" type="int"/>
989       <arg name="y" type="int"/>
990       <arg name="width" type="int"/>
991       <arg name="height" type="int"/>
992     </request>
993
994     <request name="subtract">
995       <description summary="subtract rectangle from region">
996         Subtract the specified rectangle from the region
997       </description>
998
999       <arg name="x" type="int"/>
1000       <arg name="y" type="int"/>
1001       <arg name="width" type="int"/>
1002       <arg name="height" type="int"/>
1003     </request>
1004
1005   </interface>
1006
1007 </protocol>