protocol: Clarify the documentation for the fullscreen protocol
[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="time" 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" version="1">
139     <description summary="shared memory support">
140       Support for shared memory buffers.
141     </description>
142
143     <enum name="error">
144       <entry name="invalid_format" value="0"/>
145       <entry name="invalid_stride" value="1"/>
146       <entry name="invalid_fd" value="2"/>
147     </enum>
148
149     <enum name="format">
150       <entry name="argb8888" value="0"/>
151       <entry name="xrgb8888" value="1"/>
152     </enum>
153
154     <request name="create_buffer">
155       <description summary="create a wl_buffer">
156         Transfer a shm buffer to the server.  The allocated buffer
157         would include at least stride * height bytes starting at the
158         beginning of fd.  The file descriptor is transferred over the
159         socket using AF_UNIX magical features. width, height, stride
160         and format describe the respective properties of the pixel
161         data contained in the buffer.
162       </description>
163
164       <arg name="id" type="new_id" interface="wl_buffer"/>
165       <arg name="fd" type="fd"/>
166       <arg name="width" type="int"/>
167       <arg name="height" type="int"/>
168       <arg name="stride" type="uint"/>
169       <arg name="format" type="uint"/>
170     </request>
171
172     <event name="format">
173       <arg name="format" type="uint"/>
174     </event>
175   </interface>
176
177   <interface name="wl_buffer" version="1">
178     <description summary="content for a wl_surface">
179       A buffer provides the content for a wl_surface.  Buffers are
180       created through factory interfaces such as wl_drm, wl_shm or
181       similar.  It has a width and a height and can be attached to a
182       wl_surface, but the mechanism by which a client provides and
183       updates the contents is defined by the buffer factory interface
184     </description>
185
186     <request name="damage">
187       <description summary="mark part of the buffer damaged">
188         Notify the server that the specified area of the buffers
189         contents have changed.  To describe a more complicated area of
190         damage, break down the region into rectangles and use this
191         request several times.
192       </description>
193
194       <arg name="x" type="int"/>
195       <arg name="y" type="int"/>
196       <arg name="width" type="int"/>
197       <arg name="height" type="int"/>
198     </request>
199
200     <request name="destroy" type="destructor">
201       <description summary="destroy a buffer">
202         Destroy a buffer.  This will invalidate the object id.
203       </description>
204     </request>
205
206     <event name="release">
207       <description summary="compositor releases buffer">
208         Sent when an attached buffer is no longer used by the compositor.
209       </description>
210     </event>
211   </interface>
212
213
214   <interface name="wl_data_offer" version="1">
215     <request name="accept">
216       <description summary="accept one of the offered mime-types">
217         Indicate that the client can accept the given mime-type, or
218         NULL for not accepted.  Use for feedback during drag and drop.
219       </description>
220
221       <arg name="time" type="uint"/>
222       <arg name="type" type="string"/>
223     </request>
224
225     <request name="receive">
226       <arg name="mime_type" type="string"/>
227       <arg name="fd" type="fd"/>
228     </request>
229
230     <request name="destroy" type="destructor"/>
231
232     <event name="offer">
233       <description summary="advertise offered mime-type">
234         Sent immediately after creating the wl_data_offer object.  One
235         event per offered mime type.
236       </description>
237
238       <arg name="type" type="string"/>
239     </event>
240   </interface>
241
242   <interface name="wl_data_source" version="1">
243     <request name="offer">
244       <description summary="add an offered mime type">
245         This request adds a mime-type to the set of mime-types
246         advertised to targets.  Can be called several times to offer
247         multiple types.
248       </description>
249       <arg name="type" type="string"/>
250     </request>
251
252     <request name="destroy" type="destructor">
253       <description summary="destroy the data source">
254         Destroy the data source.
255       </description>
256     </request>
257
258     <event name="target">
259       <description summary="a target accepts an offered mime-type">
260         Sent when a target accepts pointer_focus or motion events.  If
261         a target does not accept any of the offered types, type is NULL.
262       </description>
263
264       <arg name="mime_type" type="string"/>
265     </event>
266
267     <event name="send">
268       <description summary="send the data">
269         Request for data from another client.  Send the data as the
270         specified mime-type over the passed fd, then close the fd.
271       </description>
272
273       <arg name="mime_type" type="string"/>
274       <arg name="fd" type="fd"/>
275     </event>
276
277     <event name="cancelled">
278       <description summary="selection was cancelled">
279         Another selection became active.
280       </description>
281     </event>
282
283   </interface>
284
285   <interface name="wl_data_device" version="1">
286     <request name="start_drag">
287       <description summary="start drag and drop operation">
288         This request asks the compositor to start a drag and drop
289         operation on behalf of the client.  The source argument is the
290         data source that provides the data for the eventual data
291         transfer.  The origin surface is the surface where the drag
292         originates and the client must have an active implicit grab
293         that matches the timestamp.  The icon surface is an optional
294         (can be nil) surface that provides an icon to be moved around
295         with the cursor.  Initially, the top-left corner of the icon
296         surface is placed at the cursor hotspot, but subsequent
297         surface.attach request can move the relative position.
298       </description>
299       <arg name="source" type="object" interface="wl_data_source"/>
300       <arg name="origin" type="object" interface="wl_surface"/>
301       <arg name="icon" type="object" interface="wl_surface"/>
302       <arg name="time" type="uint"/>
303     </request>
304
305     <request name="set_selection">
306       <arg name="source" type="object" interface="wl_data_source"/>
307       <arg name="time" type="uint"/>
308     </request>
309
310     <event name="data_offer">
311       <description summary="introduce a new wl_data_offer">
312         The data_offer event introduces a new wl_data_offer object,
313         which will subsequently be used in either the
314         data_device.enter event (for drag and drop) or the
315         data_device.selection event (for selections).  Immediately
316         following the data_device_data_offer event, the new data_offer
317         object will send out data_offer.offer events to describe the
318         mime-types it offers.
319       </description>
320
321       <arg name="id" type="new_id" interface="wl_data_offer"/>
322     </event>
323
324     <event name="enter">
325       <arg name="time" type="uint"/>
326       <arg name="surface" type="object" interface="wl_surface"/>
327       <arg name="x" type="int"/>
328       <arg name="y" type="int"/>
329       <arg name="id" type="object" interface="wl_data_offer"/>
330     </event>
331
332     <event name="leave"/>
333
334     <event name="motion">
335       <arg name="time" type="uint"/>
336       <arg name="x" type="int"/>
337       <arg name="y" type="int"/>
338     </event>
339
340     <event name="drop"/>
341
342     <event name="selection">
343       <description summary="advertise new selection">
344         The selection event is sent out to notify the client of a new
345         wl_data_offer for the selection for this device.  The
346         data_device.data_offer and the data_offer.offer events are
347         sent out immediately before this event to introduce the data
348         offer object.  The selection event is sent to a client
349         immediately before receiving keyboard focus and when a new
350         selection is set while the client has keyboard focus.  The
351         data_offer is valid until a new data_offer or NULL is received
352         or until the client loses keyboard focus.
353       </description>
354       <arg name="id" type="object" interface="wl_data_offer"/>
355     </event>
356   </interface>
357
358   <interface name="wl_data_device_manager" version="1">
359     <request name="create_data_source">
360       <arg name="id" type="new_id" interface="wl_data_source"/>
361     </request>
362
363     <request name="get_data_device">
364       <arg name="id" type="new_id" interface="wl_data_device"/>
365       <arg name="input_device" type="object" interface="wl_input_device"/>
366     </request>
367   </interface>
368
369   <interface name="wl_shell" version="1">
370     <request name="get_shell_surface">
371       <arg name="id" type="new_id" interface="wl_shell_surface"/>
372       <arg name="surface" type="object" interface="wl_surface"/>
373     </request>
374   </interface>
375
376   <interface name="wl_shell_surface" version="1">
377
378     <description summary="desktop style meta data interface">
379       An interface implemented by a wl_surface.  On server side the
380       object is automatically destroyed when the related wl_surface is
381       destroyed.  On client side, wl_shell_surface_destroy() must be
382       called before destroying the wl_surface object.
383     </description>
384
385     <request name="move">
386       <arg name="input_device" type="object" interface="wl_input_device"/>
387       <arg name="time" type="uint"/>
388     </request>
389
390     <enum name="resize">
391       <entry name="none" value="0"/>
392       <entry name="top" value="1"/>
393       <entry name="bottom" value="2"/>
394       <entry name="left" value="4"/>
395       <entry name="top_left" value="5"/>
396       <entry name="bottom_left" value="6"/>
397       <entry name="right" value="8"/>
398       <entry name="top_right" value="9"/>
399       <entry name="bottom_right" value="10"/>
400     </enum>
401
402     <request name="resize">
403       <arg name="input_device" type="object" interface="wl_input_device"/>
404       <arg name="time" type="uint"/>
405       <arg name="edges" type="uint"/>
406     </request>
407
408     <request name="set_toplevel">
409       <description summary="make the surface a top level surface">
410         Make the surface a toplevel window.
411       </description>
412     </request>
413
414     <request name="set_transient">
415       <description summary="make the surface a transient surface">
416         Map the surface relative to an existing surface. The x and y
417         arguments specify the locations of the upper left corner of
418         the surface relative to the upper left corner of the parent
419         surface.  The flags argument controls overflow/clipping
420         behaviour when the surface would intersect a screen edge,
421         panel or such.  And possibly whether the offset only
422         determines the initial position or if the surface is locked to
423         that relative position during moves.
424       </description>
425
426       <arg name="parent" type="object" interface="wl_shell_surface"/>
427       <arg name="x" type="int"/>
428       <arg name="y" type="int"/>
429       <arg name="flags" type="uint"/>
430     </request>
431
432     <request name="set_fullscreen">
433       <description summary="make the surface a fullscreen surface">
434         Map the surface as a fullscreen surface. If an output parameter is
435         given then the surface will be made fullscreen on that output. If the
436         client does not specify the output then the compositor will apply its
437         policy - usually choosing the output on which the surface has the
438         biggest surface area.
439
440         The client may specify a method to resolve a size conflict between the
441         output size and the surface size - this is provided through the
442         fullscreen_method parameter.
443
444         The framerate parameter is used only when the fullscreen_method is set
445         to "driver", to indicate the preferred framerate. framerate=0 indicates
446         that the app does not care about framerate.
447
448         The compositor must reply to this request with a configure event with
449         the dimensions for the output on which the surface will be made fullscreen.
450       </description>
451       <arg name="method" type="uint"/>
452       <arg name="framerate" type="uint"/>
453       <arg name="output" type="object" interface="wl_output"/>
454     </request>
455
456     <enum name="fullscreen_method">
457       <description summary="different method to set the surface fullscreen">
458         Hints to indicate compositor how to deal with a conflict between the
459         dimensions for the surface and the dimensions of the output. As a hint
460         the compositor is free to ignore this parameter.
461
462         "default" The client has no preference on fullscreen behavior,
463         policies are determined by compositor.
464
465         "scale" The client prefers scaling by the compositor. Scaling would
466         always preserve surface's aspect ratio with surface centered on the
467         output
468
469         "driver" The client wants to switch video mode to the smallest mode
470         that can fit the client buffer. If the sizes do not match the
471         compositor must add black borders.
472
473         "fill" The surface is centered on the output on the screen with no
474         scaling. If the surface is of insufficient size the compositor must
475         add black borders.
476       </description>
477       <entry name="default" value="0"/>
478       <entry name="scale" value="1"/>
479       <entry name="driver" value="2"/>
480       <entry name="fill" value="3"/>
481     </enum>
482
483     <request name="set_popup">
484       <description summary="make the surface a popup surface">
485         Popup surfaces.  Will switch an implicit grab into
486         owner-events mode, and grab will continue after the implicit
487         grab ends (button released).  Once the implicit grab is over,
488         the popup grab continues until the window is destroyed or a
489         mouse button is pressed in any other clients window.  A click
490         in any of the clients surfaces is reported as normal, however,
491         clicks in other clients surfaces will be discarded and trigger
492         the callback.
493
494         TODO: Grab keyboard too, maybe just terminate on any click
495         inside or outside the surface?
496       </description>
497
498       <arg name="input_device" type="object" interface="wl_input_device"/>
499       <arg name="time" type="uint"/>
500       <arg name="parent" type="object" interface="wl_shell_surface"/>
501       <arg name="x" type="int"/>
502       <arg name="y" type="int"/>
503       <arg name="flags" type="uint"/>
504     </request>
505
506     <request name="set_maximized">
507       <description summary="make the surface a maximized surface">
508         A request from the client to notify the compositor the maximized
509         operation. The compositor will reply with a configure event telling
510         the expected new surface size. The operation is completed on the
511         next buffer attach to this surface.
512         A maximized client will fill the fullscreen of the output it is bound
513         to, except the panel area. This is the main difference between
514         a maximized shell surface and a fullscreen shell surface.
515       </description>
516       <arg name="output" type="object" interface="wl_output"/>
517     </request>
518
519     <event name="configure">
520       <description summary="suggest resize">
521         The configure event asks the client to resize its surface.
522         The size is a hint, in the sense that the client is free to
523         ignore it if it doesn't resize, pick a smaller size (to
524         satisfy aspect ration or resize in steps of NxM pixels).  The
525         client is free to dismiss all but the last configure event it
526         received.
527       </description>
528
529       <arg name="time" type="uint"/>
530       <arg name="edges" type="uint"/>
531       <arg name="width" type="int"/>
532       <arg name="height" type="int"/>
533     </event>
534
535     <event name="popup_done">
536       <description summary="popup interaction is done">
537         The popup_done event is sent out when a popup grab is broken,
538         that is, when the users clicks a surface that doesn't belong
539         to the client owning the popup surface.
540       </description>
541     </event>
542   </interface>
543
544   <interface name="wl_surface" version="1">
545     <description summary="an onscreen surface">
546       A surface.  This is an image that is displayed on the screen.
547       It has a location, size and pixel contents.
548     </description>
549
550     <request name="destroy" type="destructor">
551       <description summary="delete surface">
552         Deletes the surface and invalidates its object id.
553       </description>
554     </request>
555
556     <request name="attach">
557       <description summary="set the surface contents">
558         Copy the contents of a buffer into this surface. The x and y
559         arguments specify the location of the new buffers upper left
560         corner, relative to the old buffers upper left corner.
561       </description>
562
563       <arg name="buffer" type="object" interface="wl_buffer"/>
564       <arg name="x" type="int"/>
565       <arg name="y" type="int"/>
566     </request>
567
568     <request name="damage">
569       <description summary="mark part of the surface damaged">
570         After attaching a new buffer, this request is used to describe
571         the regions where the new buffer is different from the
572         previous buffer and needs to be repainted.  Coordinates are
573         relative to the new buffer.
574       </description>
575
576       <arg name="x" type="int"/>
577       <arg name="y" type="int"/>
578       <arg name="width" type="int"/>
579       <arg name="height" type="int"/>
580     </request>
581
582     <request name="frame">
583       <description summary="request repaint feedback">
584         Request notification when the next frame is displayed.  Useful
585         for throttling redrawing operations, and driving animations.
586         The notification will only be posted for one frame unless
587         requested again.
588       </description>
589
590       <arg name="callback" type="new_id" interface="wl_callback"/>
591     </request>
592
593     <request name="set_opaque_region">
594       <description summary="set opaque region">
595         This requests sets the region of the surface that contain
596         opaque content.  The opaque region is an optimization hint for
597         the compositor that lets it optimize out redrawing of content
598         behind opaque regions.  Setting an opaque region is not
599         required for correct behaviour, but marking transparent
600         content as opaque will result in repaint artifacts.
601
602         The region will be clipped to the extents of the current
603         surface size.  Setting the region has copy semantics, and the
604         region object can be destroyed immediately after setting the
605         opaque region.  If a buffer of a different size is attached or
606         if a nil region is set, the opaque region will revert back to
607         default.  The default opaque region is empty.
608       </description>
609
610       <arg name="region" type="object" interface="wl_region"/>
611     </request>
612
613     <request name="set_input_region">
614       <description summary="set input region">
615         This requests sets the region of the surface that can receive
616         pointer and touch events.  The region will be clipped to the
617         extents of the current surface size.  Setting the region has
618         copy semantics, and the region object can be destroyed
619         immediately after setting the input region.  If a buffer of a
620         different size is attached or if a nil region is passed, the
621         input region will revert back to default.  The default input
622         region is the entire surface.
623       </description>
624
625       <arg name="region" type="object" interface="wl_region"/>
626     </request>
627   </interface>
628
629   <interface name="wl_input_device" version="1">
630     <description summary="input device group">
631       A group of keyboards and pointer devices (mice, for
632       example). This object is published as a global during start up,
633       or when such a device is hot plugged.  A input_device group
634       typically has a pointer and maintains a keyboard_focus and a
635       pointer_focus.
636     </description>
637
638     <request name="attach">
639       <description summary="set the pointer image">
640         Set the pointer's image.  This request only takes effect if
641         the pointer focus for this device is one of the requesting
642         clients surfaces.
643       </description>
644
645       <arg name="time" type="uint"/>
646       <arg name="buffer" type="object" interface="wl_buffer"/>
647       <arg name="hotspot_x" type="int"/>
648       <arg name="hotspot_y" type="int"/>
649     </request>
650
651     <event name="motion">
652       <description summary="pointer motion event">
653         Notification of pointer location change. The arguments surface_[xy]
654         are the location relative to the focused surface.
655       </description>
656
657       <arg name="time" type="uint"/>
658       <arg name="surface_x" type="int"/>
659       <arg name="surface_y" type="int"/>
660     </event>
661
662     <event name="button">
663       <description summary="pointer button event">
664         Mouse button click and release notifications.  The location
665         of the click is given by the last motion or pointer_focus event.
666       </description>
667
668       <arg name="time" type="uint"/>
669       <arg name="button" type="uint"/>
670       <arg name="state" type="uint"/>
671     </event>
672
673     <event name="key">
674       <description summary="key event">
675         A key was pressed or released.
676       </description>
677
678       <arg name="time" type="uint"/>
679       <arg name="key" type="uint"/>
680       <arg name="state" type="uint"/>
681     </event>
682
683     <event name="pointer_enter">
684       <description summary="pointer enter event">
685         Notification that this input device's pointer is focused on
686         certain surface. When an input_device enters a surface, the
687         pointer image is undefined and a client should respond to this
688         event by setting an appropriate pointer image.
689       </description>
690
691       <arg name="time" type="uint"/>
692       <arg name="surface" type="object" interface="wl_surface"/>
693       <arg name="surface_x" type="int"/>
694       <arg name="surface_y" type="int"/>
695     </event>
696
697     <event name="pointer_leave">
698       <description summary="pointer leave event">
699       </description>
700       <arg name="time" type="uint"/>
701       <arg name="surface" type="object" interface="wl_surface"/>
702     </event>
703
704     <event name="keyboard_enter">
705       <arg name="time" type="uint"/>
706       <arg name="surface" type="object" interface="wl_surface"/>
707       <arg name="keys" type="array"/>
708     </event>
709
710     <event name="keyboard_leave">
711       <arg name="time" type="uint"/>
712       <arg name="surface" type="object" interface="wl_surface"/>
713     </event>
714
715     <event name="touch_down">
716       <arg name="time" type="uint"/>
717       <arg name="surface" type="object" interface="wl_surface"/>
718       <arg name="id" type="int" />
719       <arg name="x" type="int" />
720       <arg name="y" type="int" />
721     </event>
722
723     <event name="touch_up">
724       <arg name="time" type="uint"/>
725       <arg name="id" type="int" />
726     </event>
727
728     <event name="touch_motion">
729       <arg name="time" type="uint"/>
730       <arg name="id" type="int" />
731       <arg name="x" type="int" />
732       <arg name="y" type="int" />
733     </event>
734
735     <event name="touch_frame">
736       <description summary="end of touch frame event">
737         Indicates the end of a contact point list.
738       </description>
739     </event>
740
741     <event name="touch_cancel">
742       <description summary="touch session cancelled">
743         Sent if the compositor decides the touch stream is a global
744         gesture. No further events are sent to the clients from that
745         particular gesture.
746       </description>
747     </event>
748   </interface>
749
750
751   <interface name="wl_output" version="1">
752     <description summary="compositor output region">
753       An output describes part of the compositor geometry.  The
754       compositor work in the 'compositor coordinate system' and an
755       output corresponds to rectangular area in that space that is
756       actually visible.  This typically corresponds to a monitor that
757       displays part of the compositor space.  This object is published
758       as global during start up, or when a screen is hot plugged.
759     </description>
760
761     <enum name="subpixel">
762       <entry name="unknown" value="0"/>
763       <entry name="none" value="1"/>
764       <entry name="horizontal_rgb" value="2"/>
765       <entry name="horizontal_bgr" value="3"/>
766       <entry name="vertical_rgb" value="4"/>
767       <entry name="vertical_bgr" value="5"/>
768     </enum>
769
770     <event name="geometry">
771       <arg name="x" type="int"/>
772       <arg name="y" type="int"/>
773       <arg name="physical_width" type="int"/>
774       <arg name="physical_height" type="int"/>
775       <arg name="subpixel" type="int"/>
776       <arg name="make" type="string"/>
777       <arg name="model" type="string"/>
778     </event>
779
780     <enum name="mode">
781       <description summary="values for the flags bitfield in the mode event"/>
782       <entry name="current" value="0x1"/>
783       <entry name="preferred" value="0x2"/>
784     </enum>
785       
786     <event name="mode">
787       <arg name="flags" type="uint"/>
788       <arg name="width" type="int"/>
789       <arg name="height" type="int"/>
790       <arg name="refresh" type="int"/>
791     </event>
792   </interface>
793
794   <interface name="wl_region" version="1">
795     <description summary="region interface">
796       Region.
797     </description>
798
799     <request name="destroy" type="destructor">
800       <description summary="destroy region">
801         Destroy the region.  This will invalidate the object id.
802       </description>
803     </request>
804
805     <request name="add">
806       <description summary="add rectangle to region">
807         Add the specified rectangle to the region
808       </description>
809
810       <arg name="x" type="int"/>
811       <arg name="y" type="int"/>
812       <arg name="width" type="int"/>
813       <arg name="height" type="int"/>
814     </request>
815
816     <request name="subtract">
817       <description summary="subtract rectangle from region">
818         Subtract the specified rectangle from the region
819       </description>
820
821       <arg name="x" type="int"/>
822       <arg name="y" type="int"/>
823       <arg name="width" type="int"/>
824       <arg name="height" type="int"/>
825     </request>
826
827   </interface>
828
829 </protocol>