summaryrefslogtreecommitdiff
path: root/protocol
diff options
context:
space:
mode:
authorYuval Fledel <yuvalfl@gmail.com>2010-11-29 21:05:26 +0200
committerKristian Høgsberg <krh@bitplanet.net>2010-11-29 15:54:51 -0500
commit4ee71386090cc446fe12b961f616b7a3abb3dc1e (patch)
treece0ffa367a4b0c8f63b48b784a3aae7c00ff1bc3 /protocol
parentc4b8c457e8d765308f4791b0aaf9d23bff7639e8 (diff)
Describe the protocol using inline XML comments
Signed-off-by: Yuval Fledel <yuvalfl@gmail.com>
Diffstat (limited to 'protocol')
-rw-r--r--protocol/wayland.xml124
1 files changed, 120 insertions, 4 deletions
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 506e59b..6cdfe8f 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -1,57 +1,107 @@
+<?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 sync request. All requests made before the
+ "sync" request that had the same key as the one present in
+ this event have been processed by the server. -->
<event name="sync">
<arg name="key" type="uint"/>
</event>
+ <!-- A reply to the frame 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
+ animatiosn and compoensate for jitter-->
<event name="frame">
<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">
- <!-- dri2 auth and create buffer -->
+ <!-- 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"/>
@@ -61,14 +111,28 @@
<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"/>
@@ -79,7 +143,12 @@
</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>
@@ -114,6 +183,7 @@
</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'. -->
@@ -184,7 +254,7 @@
</event>
<!-- Similar to device::motion. Sent to potential target surfaces
- as the drag pointer moves around in the surface. -->
+ as the drag pointer moves around in the surface. -->
<event name="motion">
<arg name="time" type="uint"/>
<arg name="x" type="int"/>
@@ -200,13 +270,20 @@
<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. -->
<request name="attach">
<arg name="buffer" type="object" interface="buffer"/>
</request>
+ <!-- Set the location on the screen that this surface will
+ be displayed. -->
<request name="map">
<arg name="x" type="int"/>
<arg name="y" type="int"/>
@@ -214,6 +291,12 @@
<arg name="height" type="int"/>
</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"/>
@@ -222,7 +305,16 @@
</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"/>
@@ -230,6 +322,9 @@
<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"/>
@@ -238,18 +333,26 @@
<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"/>
@@ -266,13 +369,26 @@
</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="width" type="int"/>
<arg name="height" type="int"/>
</event>
</interface>
- <interface name="visual" version="1" />
-</protocol> \ No newline at end of file
+ <!-- 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>