|  |  |  | <?xml version="1.0" encoding="UTF-8"?>
 | 
					
						
							|  |  |  | <protocol name="wayland">
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- The core global object. This is a special singleton object.
 | 
					
						
							|  |  |  |        It is used for internal wayland protocol features. -->
 | 
					
						
							|  |  |  |   <interface name="display" version="1">
 | 
					
						
							|  |  |  |     <!-- sync is an just an echo, which will reply with a sync event.
 | 
					
						
							|  |  |  |          Since requests are handled in-order, this can be used as a
 | 
					
						
							|  |  |  |          barrier to ensure all previous requests have ben handled.
 | 
					
						
							|  |  |  |          The key argument can be used to correlate between multiple
 | 
					
						
							|  |  |  |          sync invocations. -->
 | 
					
						
							|  |  |  |     <request name="sync">
 | 
					
						
							|  |  |  |       <arg name="key" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Request notification when the next frame is displayed.
 | 
					
						
							|  |  |  |          Useful for throttling redrawing operations, and driving
 | 
					
						
							|  |  |  |          animations.  The notification will only be posted for one
 | 
					
						
							|  |  |  |          frame unless requested again. -->
 | 
					
						
							|  |  |  |     <request name="frame">
 | 
					
						
							|  |  |  |       <arg name="key" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- A request addressed a non-existent object id. This is
 | 
					
						
							|  |  |  |          tyipcally a fatal error. -->
 | 
					
						
							|  |  |  |     <event name="invalid_object">
 | 
					
						
							|  |  |  |       <arg name="object_id" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- A request tried to invoke an opcode out of range.  This is
 | 
					
						
							|  |  |  |          typically a fatal error. -->
 | 
					
						
							|  |  |  |     <event name="invalid_method">
 | 
					
						
							|  |  |  |       <arg name="object_id" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="opcode" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- A request has failed due to an out of memory error. -->
 | 
					
						
							|  |  |  |     <event name="no_memory"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Notify the client of global objects. These are objects that
 | 
					
						
							|  |  |  |          are created by the server. Globals are published on the
 | 
					
						
							|  |  |  |          initial client connection sequence, upon device hotplugs,
 | 
					
						
							|  |  |  |          device disconnects, reconfiguration or other events.  The
 | 
					
						
							|  |  |  |          server will always announce an object before the object sends
 | 
					
						
							|  |  |  |          out events. -->
 | 
					
						
							|  |  |  |     <event name="global">
 | 
					
						
							|  |  |  |       <arg name="id" type="new_id" interface="object"/>
 | 
					
						
							|  |  |  |       <arg name="name" type="string"/>
 | 
					
						
							|  |  |  |       <arg name="version" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Internal, deprecated, and will be changed.  This is an object
 | 
					
						
							|  |  |  |          IDs range that is used by the client to allocate object IDs
 | 
					
						
							|  |  |  |          in "new_id" type arguments.  The server sends range
 | 
					
						
							|  |  |  |          allocations to the client before the next range is about to
 | 
					
						
							|  |  |  |          be depleted. -->
 | 
					
						
							|  |  |  |     <event name="range">
 | 
					
						
							|  |  |  |       <arg name="base" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- A reply to the frame or sync request.  The key is the one
 | 
					
						
							|  |  |  |          used in the request.  time is in millisecond units, and
 | 
					
						
							|  |  |  |          denotes the time when the frame was posted on the
 | 
					
						
							|  |  |  |          display. time can be used to estimaate frame rate, determine
 | 
					
						
							|  |  |  |          how much to advance animations and compensate for jitter. -->
 | 
					
						
							|  |  |  |     <event name="key">
 | 
					
						
							|  |  |  |       <arg name="key" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- A compositor. This object is a global.  The compositor is in
 | 
					
						
							|  |  |  |        charge of combining the contents of multiple surfaces into one
 | 
					
						
							|  |  |  |        displayable output. -->
 | 
					
						
							|  |  |  |   <interface name="compositor" version="1">
 | 
					
						
							|  |  |  |     <!-- Factory request for a surface objects. A surface is akin to a
 | 
					
						
							|  |  |  |          window. -->
 | 
					
						
							|  |  |  |     <request name="create_surface">
 | 
					
						
							|  |  |  |       <arg name="id" type="new_id" interface="surface"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- drm support. This object is created by the server and published
 | 
					
						
							|  |  |  |        using the display's global event. -->
 | 
					
						
							|  |  |  |   <interface name="drm" version="1">
 | 
					
						
							|  |  |  |     <!-- Call this request with the magic received from drmGetMagic().
 | 
					
						
							|  |  |  |          It will be passed on to the drmAuthMagic() or
 | 
					
						
							|  |  |  |          DRIAuthConnection() call.  This authentication must be
 | 
					
						
							|  |  |  |          completed before create_buffer could be used. -->
 | 
					
						
							|  |  |  |     <request name="authenticate">
 | 
					
						
							|  |  |  |       <arg name="id" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Create a wayland buffer for the named DRM buffer.  The DRM
 | 
					
						
							|  |  |  |          surface must have a name using the flink ioctl -->
 | 
					
						
							|  |  |  |     <request name="create_buffer">
 | 
					
						
							|  |  |  |       <arg name="id" type="new_id" interface="buffer"/>
 | 
					
						
							|  |  |  |       <arg name="name" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="width" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="height" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="stride" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="visual" type="object" interface="visual"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Notification of the path of the drm device which is used by
 | 
					
						
							|  |  |  |          the server.  The client should use this device for creating
 | 
					
						
							|  |  |  |          local buffers.  Only buffers created from this device should
 | 
					
						
							|  |  |  |          be be passed to the server using this drm object's
 | 
					
						
							|  |  |  |          create_buffer request. -->
 | 
					
						
							|  |  |  |     <event name="device">
 | 
					
						
							|  |  |  |       <arg name="name" type="string"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Raised if the authenticate request succeeded -->
 | 
					
						
							|  |  |  |     <event name="authenticated"/>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- Shared memory support -->
 | 
					
						
							|  |  |  |   <interface name="shm" version="1">
 | 
					
						
							|  |  |  |     <!-- Transfer a shm buffer to the server.  The allocated buffer
 | 
					
						
							|  |  |  |          would include at least stride * height bytes starting at the
 | 
					
						
							|  |  |  |          beginning of fd.  The file descriptor is transferred over the
 | 
					
						
							|  |  |  |          socket using AF_UNIX magical features. width, height, stride
 | 
					
						
							|  |  |  |          and visual describe the respective properties of the pixel
 | 
					
						
							|  |  |  |          data contained in the buffer. -->
 | 
					
						
							|  |  |  |     <request name="create_buffer">
 | 
					
						
							|  |  |  |       <arg name="id" type="new_id" interface="buffer"/>
 | 
					
						
							|  |  |  |       <arg name="fd" type="fd"/>
 | 
					
						
							|  |  |  |       <arg name="width" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="height" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="stride" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="visual" type="object" interface="visual"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- A pixel buffer. Created using the drm, shm or similar objects.
 | 
					
						
							|  |  |  |        It has a size, visual and contents, but not a location on the
 | 
					
						
							|  |  |  |        screen -->
 | 
					
						
							|  |  |  |   <interface name="buffer" version="1">
 | 
					
						
							|  |  |  |     <!-- Abandon a buffer.  This will invalidate the object id. -->
 | 
					
						
							|  |  |  |     <request name="destroy" type="destructor"/>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <interface name="shell" version="1">
 | 
					
						
							|  |  |  |     <request name="move">
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="input_device" type="object" interface="input_device"/>
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <enum name="resize">
 | 
					
						
							|  |  |  |       <entry name="none" value="0"/>
 | 
					
						
							|  |  |  |       <entry name="top" value="1"/>
 | 
					
						
							|  |  |  |       <entry name="bottom" value="2"/>
 | 
					
						
							|  |  |  |       <entry name="left" value="4"/>
 | 
					
						
							|  |  |  |       <entry name="top_left" value="5"/>
 | 
					
						
							|  |  |  |       <entry name="bottom_left" value="6"/>
 | 
					
						
							|  |  |  |       <entry name="right" value="8"/>
 | 
					
						
							|  |  |  |       <entry name="top_right" value="9"/>
 | 
					
						
							|  |  |  |       <entry name="bottom_right" value="10"/>
 | 
					
						
							|  |  |  |     </enum>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <request name="resize">
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="input_device" type="object" interface="input_device"/>
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <!-- edges is an enum, need to get the values in here -->
 | 
					
						
							|  |  |  |       <arg name="edges" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <request name="create_drag">
 | 
					
						
							|  |  |  |       <arg name="id" type="new_id" interface="drag"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <request name="create_selection">
 | 
					
						
							|  |  |  |       <arg name="id" type="new_id" interface="selection"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- The configure event asks the client to resize its surface.
 | 
					
						
							|  |  |  |          The size is a hint, in the sense that the client is free to
 | 
					
						
							|  |  |  |          ignore it if it doesn't resize, pick a smaller size (to
 | 
					
						
							|  |  |  |          satisfy aspect ration or resize in steps of NxM pixels).  The
 | 
					
						
							|  |  |  |          client is free to dismiss all but the last configure event it
 | 
					
						
							|  |  |  |          received. -->
 | 
					
						
							|  |  |  |     <event name="configure">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="edges" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="width" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="height" type="int"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <interface name="selection" version="1">
 | 
					
						
							|  |  |  |     <!-- Add an offered mime type.  Can be called several times to
 | 
					
						
							|  |  |  |          offer multiple types, but must be called before 'activate'. -->
 | 
					
						
							|  |  |  |     <request name="offer">
 | 
					
						
							|  |  |  |       <arg name="type" type="string"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Can the selection be activated for multiple devices? -->
 | 
					
						
							|  |  |  |     <request name="activate">
 | 
					
						
							|  |  |  |       <arg name="input_device" type="object" interface="input_device"/>
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Destroy the selection. -->
 | 
					
						
							|  |  |  |     <request name="destroy" type="destructor"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Another client pasted the selection, send the mime-type over
 | 
					
						
							|  |  |  |          the passed fd. -->
 | 
					
						
							|  |  |  |     <event name="send">
 | 
					
						
							|  |  |  |       <arg name="mime_type" type="string"/>
 | 
					
						
							|  |  |  |       <arg name="fd" type="fd"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Another selection became active. -->
 | 
					
						
							|  |  |  |     <event name="cancelled"/>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <interface name="selection_offer" version="1">
 | 
					
						
							|  |  |  |     <!-- Called to receive the selection data as the specified type.
 | 
					
						
							|  |  |  |          Sends the pipe fd to the compositor, which forwards it to the
 | 
					
						
							|  |  |  |          source in the 'send' event -->
 | 
					
						
							|  |  |  |     <request name="receive">
 | 
					
						
							|  |  |  |       <arg name="mime_type" type="string"/>
 | 
					
						
							|  |  |  |       <arg name="fd" type="fd"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Sent before the keyboard_focus event to announce the types
 | 
					
						
							|  |  |  |          offered.  One event per offered mime type.  A mime type of
 | 
					
						
							|  |  |  |          NULL means the selection offer is going away.  -->
 | 
					
						
							|  |  |  |     <event name="offer">
 | 
					
						
							|  |  |  |       <arg name="type" type="string"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <event name="keyboard_focus">
 | 
					
						
							|  |  |  |       <arg name="input_device" type="object" interface="input_device"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <interface name="drag" version="1">
 | 
					
						
							|  |  |  |     <!-- Add an offered mime type.  Can be called several times to
 | 
					
						
							|  |  |  |          offer multiple types, but must be called before 'activate'. -->
 | 
					
						
							|  |  |  |     <request name="offer">
 | 
					
						
							|  |  |  |       <arg name="type" type="string"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <request name="activate">
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="input_device" type="object" interface="input_device"/>
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Destroy the drag and cancel the session. -->
 | 
					
						
							|  |  |  |     <request name="destroy" type="destructor"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Sent when a target accepts pointer_focus or motion events.
 | 
					
						
							|  |  |  |          If a target does not accept any of the offered types, type is
 | 
					
						
							|  |  |  |          NULL -->
 | 
					
						
							|  |  |  |     <event name="target">
 | 
					
						
							|  |  |  |       <arg name="mime_type" type="string"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Sent when the drag is finished.  The final mime type is that
 | 
					
						
							|  |  |  |          of the last target event.  If that was NULL, no drag target
 | 
					
						
							|  |  |  |          was valid when the drag finished, fd is undefined and the
 | 
					
						
							|  |  |  |          source should not send data.  The event is also sent in case
 | 
					
						
							|  |  |  |          a drag source tries to activate a drag after the grab was
 | 
					
						
							|  |  |  |          released, in which case mime_type will also be NULL. -->
 | 
					
						
							|  |  |  |     <event name="finish">
 | 
					
						
							|  |  |  |       <arg name="fd" type="fd"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <event name="reject"/>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <interface name="drag_offer" version="1">
 | 
					
						
							|  |  |  |     <!-- Call to accept the offer of the given type -->
 | 
					
						
							|  |  |  |     <request name="accept">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="type" type="string"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Called to initiate the drag finish sequence.  Sends the pipe
 | 
					
						
							|  |  |  |          fd to the compositor, which forwards it to the source in the
 | 
					
						
							|  |  |  |          'finish' event -->
 | 
					
						
							|  |  |  |     <request name="receive">
 | 
					
						
							|  |  |  |       <arg name="fd" type="fd"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Called to reject a drop  -->
 | 
					
						
							|  |  |  |     <request name="reject"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Sent before the pointer_focus event to announce the types
 | 
					
						
							|  |  |  |          offered.  One event per offered mime type. -->
 | 
					
						
							|  |  |  |     <event name="offer">
 | 
					
						
							|  |  |  |       <arg name="type" type="string"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Similar to device::pointer_focus.  Sent to potential target
 | 
					
						
							|  |  |  |          surfaces to offer drag data.  If the device leaves the
 | 
					
						
							|  |  |  |          window, the drag stops or the originator cancels the drag,
 | 
					
						
							|  |  |  |          this event is sent with the NULL surface, at which point the
 | 
					
						
							|  |  |  |          drag object may no longer be valid. -->
 | 
					
						
							|  |  |  |     <event name="pointer_focus">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_y" type="int"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Similar to device::motion.  Sent to potential target surfaces
 | 
					
						
							|  |  |  |          as the drag pointer moves around in the surface. -->
 | 
					
						
							|  |  |  |     <event name="motion">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_y" type="int"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Sent to indicate that the drag is finishing.  The last
 | 
					
						
							|  |  |  |          motion/pointer_focus event gives the location of the drop.
 | 
					
						
							|  |  |  |          Target must respond with the 'receive' request, which sends
 | 
					
						
							|  |  |  |          an fd to the source for writing the drag data. -->
 | 
					
						
							|  |  |  |     <event name="drop"/>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- A surface. This is an image that is displayed on the screen.
 | 
					
						
							|  |  |  |        It has a location, size and pixel contents. Similar to a window. -->
 | 
					
						
							|  |  |  |   <interface name="surface" version="1">
 | 
					
						
							|  |  |  |     <!-- Deletes the surface and invalidates its object id. -->
 | 
					
						
							|  |  |  |     <request name="destroy" type="destructor"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Copy the contents of a buffer into this surface. The x and y
 | 
					
						
							|  |  |  |          arguments specify the location of the new buffers upper left
 | 
					
						
							|  |  |  |          corner, relative to the old buffers upper left corner. -->
 | 
					
						
							|  |  |  |     <request name="attach">
 | 
					
						
							|  |  |  |       <arg name="buffer" type="object" interface="buffer"/>
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Make the surface visible as a toplevel window. -->
 | 
					
						
							|  |  |  |     <request name="map_toplevel"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Map the surface relative to an existing surface. The x and y
 | 
					
						
							|  |  |  |          arguments specify the locations of the upper left corner of
 | 
					
						
							|  |  |  |          the surface relative to the upper left corner of the parent
 | 
					
						
							|  |  |  |          surface.  The flags argument controls overflow/clipping
 | 
					
						
							|  |  |  |          behaviour when the surface would intersect a screen edge,
 | 
					
						
							|  |  |  |          panel or such.  And possibly whether the offset only
 | 
					
						
							|  |  |  |          determines the initial position or if the surface is locked
 | 
					
						
							|  |  |  |          to that relative position during moves. -->
 | 
					
						
							|  |  |  |     <request name="map_transient">
 | 
					
						
							|  |  |  |       <arg name="parent" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="flags" type="uint"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Notify the server that the attached buffer's contents have
 | 
					
						
							|  |  |  |          changed, and request a redraw. The arguments allow you to
 | 
					
						
							|  |  |  |          damage only a part of the surface, but the server may ignore
 | 
					
						
							|  |  |  |          it and redraw the entire contents of the surface.  To
 | 
					
						
							|  |  |  |          describe a more complicated area of damage, use this request
 | 
					
						
							|  |  |  |          several times. -->
 | 
					
						
							|  |  |  |     <request name="damage">
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="width" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="height" type="int"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- A group of keyboards and pointer devices (mice, for
 | 
					
						
							|  |  |  |        example). This object is published as a global during start up,
 | 
					
						
							|  |  |  |        or when such a device is hot plugged.  A input_device group
 | 
					
						
							|  |  |  |        typically has a pointer and maintains a keyboard_focus and a
 | 
					
						
							|  |  |  |        pointer_focus.  -->
 | 
					
						
							|  |  |  |   <interface name="input_device" version="1">
 | 
					
						
							|  |  |  |     <!-- Set the pointer's image.  This request only takes effect if
 | 
					
						
							|  |  |  |          the pointer focus for this device is one of the requesting
 | 
					
						
							|  |  |  |          clients surfaces.  -->
 | 
					
						
							|  |  |  |     <request name="attach">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="buffer" type="object" interface="buffer"/>
 | 
					
						
							|  |  |  |       <arg name="hotspot_x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="hotspot_y" type="int"/>
 | 
					
						
							|  |  |  |     </request>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Notification of pointer location change.
 | 
					
						
							|  |  |  |          x,y are the absolute location on the screen.
 | 
					
						
							|  |  |  |          surface_[xy] are the location relative to the focused surface. -->
 | 
					
						
							|  |  |  |     <event name="motion">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_y" type="int"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Mouse button click and release notifications.  The location
 | 
					
						
							|  |  |  |          of the click is given by the last motion or pointer_focus
 | 
					
						
							|  |  |  |          event. -->
 | 
					
						
							|  |  |  |     <event name="button">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="button" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="state" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Keyboard press. -->
 | 
					
						
							|  |  |  |     <event name="key">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="key" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="state" type="uint"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Notification that this input device's pointer is focused on
 | 
					
						
							|  |  |  |          certain surface. When an input_device enters a surface, the
 | 
					
						
							|  |  |  |          pointer image is undefined and a client should respond to
 | 
					
						
							|  |  |  |          this event by setting an apropriate pointer image. -->
 | 
					
						
							|  |  |  |     <event name="pointer_focus">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="surface_y" type="int"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <event name="keyboard_focus">
 | 
					
						
							|  |  |  |       <arg name="time" type="uint"/>
 | 
					
						
							|  |  |  |       <arg name="surface" type="object" interface="surface"/>
 | 
					
						
							|  |  |  |       <arg name="keys" type="array"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- An output describes part of the compositor geometry.  The
 | 
					
						
							|  |  |  |        compositor work in the 'compositor coordinate system' and an
 | 
					
						
							|  |  |  |        output corresponds to rectangular area in that space that is
 | 
					
						
							|  |  |  |        actually visible.  This typically corresponds to a monitor that
 | 
					
						
							|  |  |  |        displays part of the compositor space.  This object is
 | 
					
						
							|  |  |  |        published as global during start up, or when a screen is hot
 | 
					
						
							|  |  |  |        plugged.  -->
 | 
					
						
							|  |  |  |   <interface name="output" version="1">
 | 
					
						
							|  |  |  |     <!-- Notification about the screen size. -->
 | 
					
						
							|  |  |  |     <event name="geometry">
 | 
					
						
							|  |  |  |       <arg name="x" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="y" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="width" type="int"/>
 | 
					
						
							|  |  |  |       <arg name="height" type="int"/>
 | 
					
						
							|  |  |  |     </event>
 | 
					
						
							|  |  |  |   </interface>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <!-- A visual is the pixel format.  The different visuals are
 | 
					
						
							|  |  |  |        currently only identified by the order they are advertised by
 | 
					
						
							|  |  |  |        the 'global' events.  We need something better.  -->
 | 
					
						
							|  |  |  |   <interface name="visual" version="1"/>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </protocol>
 |