| <?xml version="1.0" encoding="UTF-8"?> |
| <protocol name="wayland"> |
| |
| <copyright> |
| Copyright © 2008-2011 Kristian Høgsberg |
| Copyright © 2010-2011 Intel Corporation |
| |
| Permission to use, copy, modify, distribute, and sell this |
| software and its documentation for any purpose is hereby granted |
| without fee, provided that\n the above copyright notice appear in |
| all copies and that both that copyright notice and this permission |
| notice appear in supporting documentation, and that the name of |
| the copyright holders not be used in advertising or publicity |
| pertaining to distribution of the software without specific, |
| written prior permission. The copyright holders make no |
| representations about the suitability of this software for any |
| purpose. It is provided "as is" without express or implied |
| warranty. |
| |
| THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS |
| SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND |
| FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN |
| AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, |
| ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF |
| THIS SOFTWARE. |
| </copyright> |
| |
| <!-- The core global object. This is a special singleton object. |
| It is used for internal wayland protocol features. --> |
| <interface name="wl_display" version="1"> |
| <request name="bind"> |
| <arg name="name" type="uint"/> |
| <arg name="interface" type="string"/> |
| <arg name="version" type="uint"/> |
| <arg name="id" type="new_id" interface="wl_object"/> |
| </request> |
| |
| <!-- sync is an just an echo, which will reply with a key event. |
| Since requests are handled in-order, this can be used as a |
| barrier to ensure all previous requests have been handled. |
| The key argument can be used to correlate between multiple |
| sync invocations. --> |
| <request name="sync"> |
| <arg name="callback" type="new_id" interface="wl_callback"/> |
| </request> |
| |
| <!-- A fatal error has occurred. --> |
| <event name="error"> |
| <arg name="object_id" type="object" interface="wl_object"/> |
| <arg name="code" type="uint"/> |
| <arg name="message" type="string"/> |
| </event> |
| |
| <enum name="error"> |
| <entry name="invalid_object" value="0"/> |
| <entry name="invalid_method" value="1"/> |
| <entry name="no_memory" value="2"/> |
| </enum> |
| |
| <!-- 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="name" type="uint"/> |
| <arg name="interface" type="string"/> |
| <arg name="version" type="uint"/> |
| </event> |
| |
| <!-- Notify the client of removed global objects. --> |
| <event name="global_remove"> |
| <arg name="name" type="uint" /> |
| </event> |
| |
| <!-- Server has deleted the id and client can now reuse it. --> |
| <event name="delete_id"> |
| <arg name="id" type="uint" /> |
| </event> |
| </interface> |
| |
| <interface name="wl_callback" version="1"> |
| <event name="done"> |
| <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="wl_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="wl_surface"/> |
| </request> |
| </interface> |
| |
| <!-- Shared memory support --> |
| <interface name="wl_shm" version="1"> |
| <enum name="error"> |
| <entry name="invalid_format" value="0"/> |
| <entry name="invalid_stride" value="1"/> |
| <entry name="invalid_fd" value="2"/> |
| </enum> |
| |
| <enum name="format"> |
| <entry name="argb32" value="0"/> |
| <entry name="premultiplied_argb32" value="1"/> |
| <entry name="xrgb32" value="2"/> |
| </enum> |
| |
| <!-- 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 format describe the respective properties of the pixel |
| data contained in the buffer. --> |
| <request name="create_buffer"> |
| <arg name="id" type="new_id" interface="wl_buffer"/> |
| <arg name="fd" type="fd"/> |
| <arg name="width" type="int"/> |
| <arg name="height" type="int"/> |
| <arg name="stride" type="uint"/> |
| <arg name="format" type="uint"/> |
| </request> |
| |
| <event name="format"> |
| <arg name="format" type="uint"/> |
| </event> |
| </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="wl_buffer" version="1"> |
| <!-- Notify the server that the specified area of the buffers |
| contents have changed. To describe a more complicated area |
| of damage, break down the region into rectangles and 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> |
| |
| <!-- Destroy a buffer. This will invalidate the object id. --> |
| <request name="destroy" type="destructor"/> |
| |
| <!-- Sent when an attached buffer is no longer used by the compositor. --> |
| <event name="release"/> |
| </interface> |
| |
| |
| <interface name="wl_data_offer" version="1"> |
| <!-- Indicate that the client can accept the given mime-type, or |
| NULL for not accepted. Use for feedback during drag and |
| drop. --> |
| <request name="accept"> |
| <arg name="time" type="uint"/> |
| <arg name="type" type="string"/> |
| </request> |
| |
| <request name="receive"> |
| <arg name="mime_type" type="string"/> |
| <arg name="fd" type="fd"/> |
| </request> |
| |
| <request name="destroy" type="destructor"/> |
| |
| <!-- Sent immediately after creating the wl_data_offer object. One |
| event per offered mime type. --> |
| <event name="offer"> |
| <arg name="type" type="string"/> |
| </event> |
| </interface> |
| |
| <interface name="wl_data_source" version="1"> |
| <!-- Add an offered mime type. Can be called several times to |
| offer multiple types. --> |
| <request name="offer"> |
| <arg name="type" type="string"/> |
| </request> |
| |
| <!-- Destroy the selection. --> |
| <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> |
| |
| <!-- Request for data from another client. Send the data in the |
| specified mime-type over the passed fd, the close it. --> |
| <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="wl_data_device" version="1"> |
| <request name="start_drag"> |
| <arg name="source" type="object" interface="wl_data_source"/> |
| <arg name="surface" type="object" interface="wl_surface"/> |
| <arg name="time" type="uint"/> |
| </request> |
| |
| <request name="attach"> |
| <arg name="time" type="uint"/> |
| <arg name="buffer" type="object" interface="wl_buffer"/> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| </request> |
| |
| <request name="set_selection"> |
| <arg name="source" type="object" interface="wl_data_source"/> |
| <arg name="time" type="uint"/> |
| </request> |
| |
| <event name="data_offer"> |
| <arg name="id" type="new_id" interface="wl_data_offer"/> |
| </event> |
| |
| <event name="enter"> |
| <arg name="time" type="uint"/> |
| <arg name="surface" type="object" interface="wl_surface"/> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| <arg name="id" type="object" interface="wl_data_offer"/> |
| </event> |
| |
| <event name="leave"/> |
| |
| <event name="motion"> |
| <arg name="time" type="uint"/> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| </event> |
| |
| <event name="drop"/> |
| |
| <event name="selection"> |
| <arg name="id" type="object" interface="wl_data_offer"/> |
| </event> |
| </interface> |
| |
| <interface name="wl_data_device_manager" version="1"> |
| <request name="create_data_source"> |
| <arg name="id" type="new_id" interface="wl_data_source"/> |
| </request> |
| |
| <request name="get_data_device"> |
| <arg name="id" type="new_id" interface="wl_data_device"/> |
| <arg name="input_device" type="object" interface="wl_input_device"/> |
| </request> |
| </interface> |
| |
| <interface name="wl_shell" version="1"> |
| <request name="move"> |
| <arg name="surface" type="object" interface="wl_surface"/> |
| <arg name="input_device" type="object" interface="wl_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="wl_surface"/> |
| <arg name="input_device" type="object" interface="wl_input_device"/> |
| <arg name="time" type="uint"/> |
| <!-- edges is an enum, need to get the values in here --> |
| <arg name="edges" type="uint"/> |
| </request> |
| |
| <!-- Make the surface visible as a toplevel window. --> |
| <request name="set_toplevel"> |
| <arg name="surface" type="object" interface="wl_surface"/> |
| </request> |
| |
| <!-- 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="set_transient"> |
| <arg name="surface" type="object" interface="wl_surface"/> |
| <arg name="parent" type="object" interface="wl_surface"/> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| <arg name="flags" type="uint"/> |
| </request> |
| |
| <!-- Map the surface as a fullscreen surface. There are a number |
| of options here: on which output? if the surface size doesn't |
| match the output size, do we scale, change resolution, or add |
| black borders? is that something the client controls? what |
| about transient surfaces, do they float on top of the |
| fullscreen? what if there's already a fullscreen surface on |
| the output, maybe you can only go fullscreen if you're |
| active? --> |
| <request name="set_fullscreen"> |
| <arg name="surface" type="object" interface="wl_surface"/> |
| </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="wl_surface"/> |
| <arg name="width" type="int"/> |
| <arg name="height" type="int"/> |
| </event> |
| </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="wl_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="wl_buffer"/> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| </request> |
| |
| <!-- After attaching a new buffer, this request is used to |
| describe the regions where the new buffer is different from |
| the previous buffer and needs to be repainted. Coordinates |
| are relative to the new buffer. --> |
| <request name="damage"> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| <arg name="width" type="int"/> |
| <arg name="height" type="int"/> |
| </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="callback" type="new_id" interface="wl_callback"/> |
| </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="wl_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="wl_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="wl_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="wl_surface"/> |
| <arg name="keys" type="array"/> |
| </event> |
| |
| <event name="touch_down"> |
| <arg name="time" type="uint"/> |
| <arg name="id" type="int" /> |
| <arg name="x" type="int" /> |
| <arg name="y" type="int" /> |
| </event> |
| |
| <event name="touch_up"> |
| <arg name="time" type="uint"/> |
| <arg name="id" type="int" /> |
| </event> |
| |
| <event name="touch_motion"> |
| <arg name="time" type="uint"/> |
| <arg name="id" type="int" /> |
| <arg name="x" type="int" /> |
| <arg name="y" type="int" /> |
| </event> |
| |
| <!-- Indicates the end of a contact point list. --> |
| <event name="touch_frame"/> |
| |
| <!-- Sent if the compositor decides the touch stream is a global |
| gesture. No further events are sent to the clients from that |
| particular gesture. --> |
| <event name="touch_cancel"/> |
| </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="wl_output" version="1"> |
| |
| <enum name="subpixel"> |
| <entry name="unknown" value="0"/> |
| <entry name="none" value="1"/> |
| <entry name="horizontal_rgb" value="2"/> |
| <entry name="horizontal_bgr" value="3"/> |
| <entry name="vertical_rgb" value="4"/> |
| <entry name="vertical_bgr" value="5"/> |
| </enum> |
| |
| <event name="geometry"> |
| <arg name="x" type="int"/> |
| <arg name="y" type="int"/> |
| <arg name="physical_width" type="int"/> |
| <arg name="physical_height" type="int"/> |
| <arg name="subpixel" type="int"/> |
| <arg name="make" type="string"/> |
| <arg name="model" type="string"/> |
| </event> |
| |
| <!-- Values for the flags bitfield of the mode event. --> |
| <enum name="mode"> |
| <entry name="current" value="0x1"/> |
| <entry name="preferred" value="0x2"/> |
| </enum> |
| |
| <event name="mode"> |
| <arg name="flags" type="uint"/> |
| <arg name="width" type="int"/> |
| <arg name="height" type="int"/> |
| <arg name="refresh" type="int"/> |
| </event> |
| </interface> |
| |
| </protocol> |