github.com/rajveermalviya/gamen@v0.1.2-0.20220930195403-9be15877c1aa/internal/wayland/protocols/wayland.xml (about) 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 Copyright © 2012-2013 Collabora, Ltd. 8 9 Permission is hereby granted, free of charge, to any person 10 obtaining a copy of this software and associated documentation files 11 (the "Software"), to deal in the Software without restriction, 12 including without limitation the rights to use, copy, modify, merge, 13 publish, distribute, sublicense, and/or sell copies of the Software, 14 and to permit persons to whom the Software is furnished to do so, 15 subject to the following conditions: 16 17 The above copyright notice and this permission notice (including the 18 next paragraph) shall be included in all copies or substantial 19 portions of the Software. 20 21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 25 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 26 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 27 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 28 SOFTWARE. 29 </copyright> 30 31 <interface name="wl_display" version="1"> 32 <description summary="core global object"> 33 The core global object. This is a special singleton object. It 34 is used for internal Wayland protocol features. 35 </description> 36 37 <request name="sync"> 38 <description summary="asynchronous roundtrip"> 39 The sync request asks the server to emit the 'done' event 40 on the returned wl_callback object. Since requests are 41 handled in-order and events are delivered in-order, this can 42 be used as a barrier to ensure all previous requests and the 43 resulting events have been handled. 44 45 The object returned by this request will be destroyed by the 46 compositor after the callback is fired and as such the client must not 47 attempt to use it after that point. 48 49 The callback_data passed in the callback is the event serial. 50 </description> 51 <arg name="callback" type="new_id" interface="wl_callback" 52 summary="callback object for the sync request"/> 53 </request> 54 55 <request name="get_registry"> 56 <description summary="get global registry object"> 57 This request creates a registry object that allows the client 58 to list and bind the global objects available from the 59 compositor. 60 61 It should be noted that the server side resources consumed in 62 response to a get_registry request can only be released when the 63 client disconnects, not when the client side proxy is destroyed. 64 Therefore, clients should invoke get_registry as infrequently as 65 possible to avoid wasting memory. 66 </description> 67 <arg name="registry" type="new_id" interface="wl_registry" 68 summary="global registry object"/> 69 </request> 70 71 <event name="error"> 72 <description summary="fatal error event"> 73 The error event is sent out when a fatal (non-recoverable) 74 error has occurred. The object_id argument is the object 75 where the error occurred, most often in response to a request 76 to that object. The code identifies the error and is defined 77 by the object interface. As such, each interface defines its 78 own set of error codes. The message is a brief description 79 of the error, for (debugging) convenience. 80 </description> 81 <arg name="object_id" type="object" summary="object where the error occurred"/> 82 <arg name="code" type="uint" summary="error code"/> 83 <arg name="message" type="string" summary="error description"/> 84 </event> 85 86 <enum name="error"> 87 <description summary="global error values"> 88 These errors are global and can be emitted in response to any 89 server request. 90 </description> 91 <entry name="invalid_object" value="0" 92 summary="server couldn't find object"/> 93 <entry name="invalid_method" value="1" 94 summary="method doesn't exist on the specified interface or malformed request"/> 95 <entry name="no_memory" value="2" 96 summary="server is out of memory"/> 97 <entry name="implementation" value="3" 98 summary="implementation error in compositor"/> 99 </enum> 100 101 <event name="delete_id"> 102 <description summary="acknowledge object ID deletion"> 103 This event is used internally by the object ID management 104 logic. When a client deletes an object that it had created, 105 the server will send this event to acknowledge that it has 106 seen the delete request. When the client receives this event, 107 it will know that it can safely reuse the object ID. 108 </description> 109 <arg name="id" type="uint" summary="deleted object ID"/> 110 </event> 111 </interface> 112 113 <interface name="wl_registry" version="1"> 114 <description summary="global registry object"> 115 The singleton global registry object. The server has a number of 116 global objects that are available to all clients. These objects 117 typically represent an actual object in the server (for example, 118 an input device) or they are singleton objects that provide 119 extension functionality. 120 121 When a client creates a registry object, the registry object 122 will emit a global event for each global currently in the 123 registry. Globals come and go as a result of device or 124 monitor hotplugs, reconfiguration or other events, and the 125 registry will send out global and global_remove events to 126 keep the client up to date with the changes. To mark the end 127 of the initial burst of events, the client can use the 128 wl_display.sync request immediately after calling 129 wl_display.get_registry. 130 131 A client can bind to a global object by using the bind 132 request. This creates a client-side handle that lets the object 133 emit events to the client and lets the client invoke requests on 134 the object. 135 </description> 136 137 <request name="bind"> 138 <description summary="bind an object to the display"> 139 Binds a new, client-created object to the server using the 140 specified name as the identifier. 141 </description> 142 <arg name="name" type="uint" summary="unique numeric name of the object"/> 143 <arg name="id" type="new_id" summary="bounded object"/> 144 </request> 145 146 <event name="global"> 147 <description summary="announce global object"> 148 Notify the client of global objects. 149 150 The event notifies the client that a global object with 151 the given name is now available, and it implements the 152 given version of the given interface. 153 </description> 154 <arg name="name" type="uint" summary="numeric name of the global object"/> 155 <arg name="interface" type="string" summary="interface implemented by the object"/> 156 <arg name="version" type="uint" summary="interface version"/> 157 </event> 158 159 <event name="global_remove"> 160 <description summary="announce removal of global object"> 161 Notify the client of removed global objects. 162 163 This event notifies the client that the global identified 164 by name is no longer available. If the client bound to 165 the global using the bind request, the client should now 166 destroy that object. 167 168 The object remains valid and requests to the object will be 169 ignored until the client destroys it, to avoid races between 170 the global going away and a client sending a request to it. 171 </description> 172 <arg name="name" type="uint" summary="numeric name of the global object"/> 173 </event> 174 </interface> 175 176 <interface name="wl_callback" version="1"> 177 <description summary="callback object"> 178 Clients can handle the 'done' event to get notified when 179 the related request is done. 180 </description> 181 182 <event name="done" type="destructor"> 183 <description summary="done event"> 184 Notify the client when the related request is done. 185 </description> 186 <arg name="callback_data" type="uint" summary="request-specific data for the callback"/> 187 </event> 188 </interface> 189 190 <interface name="wl_compositor" version="5"> 191 <description summary="the compositor singleton"> 192 A compositor. This object is a singleton global. The 193 compositor is in charge of combining the contents of multiple 194 surfaces into one displayable output. 195 </description> 196 197 <request name="create_surface"> 198 <description summary="create new surface"> 199 Ask the compositor to create a new surface. 200 </description> 201 <arg name="id" type="new_id" interface="wl_surface" summary="the new surface"/> 202 </request> 203 204 <request name="create_region"> 205 <description summary="create new region"> 206 Ask the compositor to create a new region. 207 </description> 208 <arg name="id" type="new_id" interface="wl_region" summary="the new region"/> 209 </request> 210 </interface> 211 212 <interface name="wl_shm_pool" version="1"> 213 <description summary="a shared memory pool"> 214 The wl_shm_pool object encapsulates a piece of memory shared 215 between the compositor and client. Through the wl_shm_pool 216 object, the client can allocate shared memory wl_buffer objects. 217 All objects created through the same pool share the same 218 underlying mapped memory. Reusing the mapped memory avoids the 219 setup/teardown overhead and is useful when interactively resizing 220 a surface or for many small buffers. 221 </description> 222 223 <request name="create_buffer"> 224 <description summary="create a buffer from the pool"> 225 Create a wl_buffer object from the pool. 226 227 The buffer is created offset bytes into the pool and has 228 width and height as specified. The stride argument specifies 229 the number of bytes from the beginning of one row to the beginning 230 of the next. The format is the pixel format of the buffer and 231 must be one of those advertised through the wl_shm.format event. 232 233 A buffer will keep a reference to the pool it was created from 234 so it is valid to destroy the pool immediately after creating 235 a buffer from it. 236 </description> 237 <arg name="id" type="new_id" interface="wl_buffer" summary="buffer to create"/> 238 <arg name="offset" type="int" summary="buffer byte offset within the pool"/> 239 <arg name="width" type="int" summary="buffer width, in pixels"/> 240 <arg name="height" type="int" summary="buffer height, in pixels"/> 241 <arg name="stride" type="int" summary="number of bytes from the beginning of one row to the beginning of the next row"/> 242 <arg name="format" type="uint" enum="wl_shm.format" summary="buffer pixel format"/> 243 </request> 244 245 <request name="destroy" type="destructor"> 246 <description summary="destroy the pool"> 247 Destroy the shared memory pool. 248 249 The mmapped memory will be released when all 250 buffers that have been created from this pool 251 are gone. 252 </description> 253 </request> 254 255 <request name="resize"> 256 <description summary="change the size of the pool mapping"> 257 This request will cause the server to remap the backing memory 258 for the pool from the file descriptor passed when the pool was 259 created, but using the new size. This request can only be 260 used to make the pool bigger. 261 262 This request only changes the amount of bytes that are mmapped 263 by the server and does not touch the file corresponding to the 264 file descriptor passed at creation time. It is the client's 265 responsibility to ensure that the file is at least as big as 266 the new pool size. 267 </description> 268 <arg name="size" type="int" summary="new size of the pool, in bytes"/> 269 </request> 270 </interface> 271 272 <interface name="wl_shm" version="1"> 273 <description summary="shared memory support"> 274 A singleton global object that provides support for shared 275 memory. 276 277 Clients can create wl_shm_pool objects using the create_pool 278 request. 279 280 On binding the wl_shm object one or more format events 281 are emitted to inform clients about the valid pixel formats 282 that can be used for buffers. 283 </description> 284 285 <enum name="error"> 286 <description summary="wl_shm error values"> 287 These errors can be emitted in response to wl_shm requests. 288 </description> 289 <entry name="invalid_format" value="0" summary="buffer format is not known"/> 290 <entry name="invalid_stride" value="1" summary="invalid size or stride during pool or buffer creation"/> 291 <entry name="invalid_fd" value="2" summary="mmapping the file descriptor failed"/> 292 </enum> 293 294 <enum name="format"> 295 <description summary="pixel formats"> 296 This describes the memory layout of an individual pixel. 297 298 All renderers should support argb8888 and xrgb8888 but any other 299 formats are optional and may not be supported by the particular 300 renderer in use. 301 302 The drm format codes match the macros defined in drm_fourcc.h, except 303 argb8888 and xrgb8888. The formats actually supported by the compositor 304 will be reported by the format event. 305 306 For all wl_shm formats and unless specified in another protocol 307 extension, pre-multiplied alpha is used for pixel values. 308 </description> 309 <!-- Note to protocol writers: don't update this list manually, instead 310 run the automated script that keeps it in sync with drm_fourcc.h. --> 311 <entry name="argb8888" value="0" summary="32-bit ARGB format, [31:0] A:R:G:B 8:8:8:8 little endian"/> 312 <entry name="xrgb8888" value="1" summary="32-bit RGB format, [31:0] x:R:G:B 8:8:8:8 little endian"/> 313 <entry name="c8" value="0x20203843" summary="8-bit color index format, [7:0] C"/> 314 <entry name="rgb332" value="0x38424752" summary="8-bit RGB format, [7:0] R:G:B 3:3:2"/> 315 <entry name="bgr233" value="0x38524742" summary="8-bit BGR format, [7:0] B:G:R 2:3:3"/> 316 <entry name="xrgb4444" value="0x32315258" summary="16-bit xRGB format, [15:0] x:R:G:B 4:4:4:4 little endian"/> 317 <entry name="xbgr4444" value="0x32314258" summary="16-bit xBGR format, [15:0] x:B:G:R 4:4:4:4 little endian"/> 318 <entry name="rgbx4444" value="0x32315852" summary="16-bit RGBx format, [15:0] R:G:B:x 4:4:4:4 little endian"/> 319 <entry name="bgrx4444" value="0x32315842" summary="16-bit BGRx format, [15:0] B:G:R:x 4:4:4:4 little endian"/> 320 <entry name="argb4444" value="0x32315241" summary="16-bit ARGB format, [15:0] A:R:G:B 4:4:4:4 little endian"/> 321 <entry name="abgr4444" value="0x32314241" summary="16-bit ABGR format, [15:0] A:B:G:R 4:4:4:4 little endian"/> 322 <entry name="rgba4444" value="0x32314152" summary="16-bit RBGA format, [15:0] R:G:B:A 4:4:4:4 little endian"/> 323 <entry name="bgra4444" value="0x32314142" summary="16-bit BGRA format, [15:0] B:G:R:A 4:4:4:4 little endian"/> 324 <entry name="xrgb1555" value="0x35315258" summary="16-bit xRGB format, [15:0] x:R:G:B 1:5:5:5 little endian"/> 325 <entry name="xbgr1555" value="0x35314258" summary="16-bit xBGR 1555 format, [15:0] x:B:G:R 1:5:5:5 little endian"/> 326 <entry name="rgbx5551" value="0x35315852" summary="16-bit RGBx 5551 format, [15:0] R:G:B:x 5:5:5:1 little endian"/> 327 <entry name="bgrx5551" value="0x35315842" summary="16-bit BGRx 5551 format, [15:0] B:G:R:x 5:5:5:1 little endian"/> 328 <entry name="argb1555" value="0x35315241" summary="16-bit ARGB 1555 format, [15:0] A:R:G:B 1:5:5:5 little endian"/> 329 <entry name="abgr1555" value="0x35314241" summary="16-bit ABGR 1555 format, [15:0] A:B:G:R 1:5:5:5 little endian"/> 330 <entry name="rgba5551" value="0x35314152" summary="16-bit RGBA 5551 format, [15:0] R:G:B:A 5:5:5:1 little endian"/> 331 <entry name="bgra5551" value="0x35314142" summary="16-bit BGRA 5551 format, [15:0] B:G:R:A 5:5:5:1 little endian"/> 332 <entry name="rgb565" value="0x36314752" summary="16-bit RGB 565 format, [15:0] R:G:B 5:6:5 little endian"/> 333 <entry name="bgr565" value="0x36314742" summary="16-bit BGR 565 format, [15:0] B:G:R 5:6:5 little endian"/> 334 <entry name="rgb888" value="0x34324752" summary="24-bit RGB format, [23:0] R:G:B little endian"/> 335 <entry name="bgr888" value="0x34324742" summary="24-bit BGR format, [23:0] B:G:R little endian"/> 336 <entry name="xbgr8888" value="0x34324258" summary="32-bit xBGR format, [31:0] x:B:G:R 8:8:8:8 little endian"/> 337 <entry name="rgbx8888" value="0x34325852" summary="32-bit RGBx format, [31:0] R:G:B:x 8:8:8:8 little endian"/> 338 <entry name="bgrx8888" value="0x34325842" summary="32-bit BGRx format, [31:0] B:G:R:x 8:8:8:8 little endian"/> 339 <entry name="abgr8888" value="0x34324241" summary="32-bit ABGR format, [31:0] A:B:G:R 8:8:8:8 little endian"/> 340 <entry name="rgba8888" value="0x34324152" summary="32-bit RGBA format, [31:0] R:G:B:A 8:8:8:8 little endian"/> 341 <entry name="bgra8888" value="0x34324142" summary="32-bit BGRA format, [31:0] B:G:R:A 8:8:8:8 little endian"/> 342 <entry name="xrgb2101010" value="0x30335258" summary="32-bit xRGB format, [31:0] x:R:G:B 2:10:10:10 little endian"/> 343 <entry name="xbgr2101010" value="0x30334258" summary="32-bit xBGR format, [31:0] x:B:G:R 2:10:10:10 little endian"/> 344 <entry name="rgbx1010102" value="0x30335852" summary="32-bit RGBx format, [31:0] R:G:B:x 10:10:10:2 little endian"/> 345 <entry name="bgrx1010102" value="0x30335842" summary="32-bit BGRx format, [31:0] B:G:R:x 10:10:10:2 little endian"/> 346 <entry name="argb2101010" value="0x30335241" summary="32-bit ARGB format, [31:0] A:R:G:B 2:10:10:10 little endian"/> 347 <entry name="abgr2101010" value="0x30334241" summary="32-bit ABGR format, [31:0] A:B:G:R 2:10:10:10 little endian"/> 348 <entry name="rgba1010102" value="0x30334152" summary="32-bit RGBA format, [31:0] R:G:B:A 10:10:10:2 little endian"/> 349 <entry name="bgra1010102" value="0x30334142" summary="32-bit BGRA format, [31:0] B:G:R:A 10:10:10:2 little endian"/> 350 <entry name="yuyv" value="0x56595559" summary="packed YCbCr format, [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian"/> 351 <entry name="yvyu" value="0x55595659" summary="packed YCbCr format, [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian"/> 352 <entry name="uyvy" value="0x59565955" summary="packed YCbCr format, [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian"/> 353 <entry name="vyuy" value="0x59555956" summary="packed YCbCr format, [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian"/> 354 <entry name="ayuv" value="0x56555941" summary="packed AYCbCr format, [31:0] A:Y:Cb:Cr 8:8:8:8 little endian"/> 355 <entry name="nv12" value="0x3231564e" summary="2 plane YCbCr Cr:Cb format, 2x2 subsampled Cr:Cb plane"/> 356 <entry name="nv21" value="0x3132564e" summary="2 plane YCbCr Cb:Cr format, 2x2 subsampled Cb:Cr plane"/> 357 <entry name="nv16" value="0x3631564e" summary="2 plane YCbCr Cr:Cb format, 2x1 subsampled Cr:Cb plane"/> 358 <entry name="nv61" value="0x3136564e" summary="2 plane YCbCr Cb:Cr format, 2x1 subsampled Cb:Cr plane"/> 359 <entry name="yuv410" value="0x39565559" summary="3 plane YCbCr format, 4x4 subsampled Cb (1) and Cr (2) planes"/> 360 <entry name="yvu410" value="0x39555659" summary="3 plane YCbCr format, 4x4 subsampled Cr (1) and Cb (2) planes"/> 361 <entry name="yuv411" value="0x31315559" summary="3 plane YCbCr format, 4x1 subsampled Cb (1) and Cr (2) planes"/> 362 <entry name="yvu411" value="0x31315659" summary="3 plane YCbCr format, 4x1 subsampled Cr (1) and Cb (2) planes"/> 363 <entry name="yuv420" value="0x32315559" summary="3 plane YCbCr format, 2x2 subsampled Cb (1) and Cr (2) planes"/> 364 <entry name="yvu420" value="0x32315659" summary="3 plane YCbCr format, 2x2 subsampled Cr (1) and Cb (2) planes"/> 365 <entry name="yuv422" value="0x36315559" summary="3 plane YCbCr format, 2x1 subsampled Cb (1) and Cr (2) planes"/> 366 <entry name="yvu422" value="0x36315659" summary="3 plane YCbCr format, 2x1 subsampled Cr (1) and Cb (2) planes"/> 367 <entry name="yuv444" value="0x34325559" summary="3 plane YCbCr format, non-subsampled Cb (1) and Cr (2) planes"/> 368 <entry name="yvu444" value="0x34325659" summary="3 plane YCbCr format, non-subsampled Cr (1) and Cb (2) planes"/> 369 <entry name="r8" value="0x20203852" summary="[7:0] R"/> 370 <entry name="r16" value="0x20363152" summary="[15:0] R little endian"/> 371 <entry name="rg88" value="0x38384752" summary="[15:0] R:G 8:8 little endian"/> 372 <entry name="gr88" value="0x38385247" summary="[15:0] G:R 8:8 little endian"/> 373 <entry name="rg1616" value="0x32334752" summary="[31:0] R:G 16:16 little endian"/> 374 <entry name="gr1616" value="0x32335247" summary="[31:0] G:R 16:16 little endian"/> 375 <entry name="xrgb16161616f" value="0x48345258" summary="[63:0] x:R:G:B 16:16:16:16 little endian"/> 376 <entry name="xbgr16161616f" value="0x48344258" summary="[63:0] x:B:G:R 16:16:16:16 little endian"/> 377 <entry name="argb16161616f" value="0x48345241" summary="[63:0] A:R:G:B 16:16:16:16 little endian"/> 378 <entry name="abgr16161616f" value="0x48344241" summary="[63:0] A:B:G:R 16:16:16:16 little endian"/> 379 <entry name="xyuv8888" value="0x56555958" summary="[31:0] X:Y:Cb:Cr 8:8:8:8 little endian"/> 380 <entry name="vuy888" value="0x34325556" summary="[23:0] Cr:Cb:Y 8:8:8 little endian"/> 381 <entry name="vuy101010" value="0x30335556" summary="Y followed by U then V, 10:10:10. Non-linear modifier only"/> 382 <entry name="y210" value="0x30313259" summary="[63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 10:6:10:6:10:6:10:6 little endian per 2 Y pixels"/> 383 <entry name="y212" value="0x32313259" summary="[63:0] Cr0:0:Y1:0:Cb0:0:Y0:0 12:4:12:4:12:4:12:4 little endian per 2 Y pixels"/> 384 <entry name="y216" value="0x36313259" summary="[63:0] Cr0:Y1:Cb0:Y0 16:16:16:16 little endian per 2 Y pixels"/> 385 <entry name="y410" value="0x30313459" summary="[31:0] A:Cr:Y:Cb 2:10:10:10 little endian"/> 386 <entry name="y412" value="0x32313459" summary="[63:0] A:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian"/> 387 <entry name="y416" value="0x36313459" summary="[63:0] A:Cr:Y:Cb 16:16:16:16 little endian"/> 388 <entry name="xvyu2101010" value="0x30335658" summary="[31:0] X:Cr:Y:Cb 2:10:10:10 little endian"/> 389 <entry name="xvyu12_16161616" value="0x36335658" summary="[63:0] X:0:Cr:0:Y:0:Cb:0 12:4:12:4:12:4:12:4 little endian"/> 390 <entry name="xvyu16161616" value="0x38345658" summary="[63:0] X:Cr:Y:Cb 16:16:16:16 little endian"/> 391 <entry name="y0l0" value="0x304c3059" summary="[63:0] A3:A2:Y3:0:Cr0:0:Y2:0:A1:A0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian"/> 392 <entry name="x0l0" value="0x304c3058" summary="[63:0] X3:X2:Y3:0:Cr0:0:Y2:0:X1:X0:Y1:0:Cb0:0:Y0:0 1:1:8:2:8:2:8:2:1:1:8:2:8:2:8:2 little endian"/> 393 <entry name="y0l2" value="0x324c3059" summary="[63:0] A3:A2:Y3:Cr0:Y2:A1:A0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian"/> 394 <entry name="x0l2" value="0x324c3058" summary="[63:0] X3:X2:Y3:Cr0:Y2:X1:X0:Y1:Cb0:Y0 1:1:10:10:10:1:1:10:10:10 little endian"/> 395 <entry name="yuv420_8bit" value="0x38305559"/> 396 <entry name="yuv420_10bit" value="0x30315559"/> 397 <entry name="xrgb8888_a8" value="0x38415258"/> 398 <entry name="xbgr8888_a8" value="0x38414258"/> 399 <entry name="rgbx8888_a8" value="0x38415852"/> 400 <entry name="bgrx8888_a8" value="0x38415842"/> 401 <entry name="rgb888_a8" value="0x38413852"/> 402 <entry name="bgr888_a8" value="0x38413842"/> 403 <entry name="rgb565_a8" value="0x38413552"/> 404 <entry name="bgr565_a8" value="0x38413542"/> 405 <entry name="nv24" value="0x3432564e" summary="non-subsampled Cr:Cb plane"/> 406 <entry name="nv42" value="0x3234564e" summary="non-subsampled Cb:Cr plane"/> 407 <entry name="p210" value="0x30313250" summary="2x1 subsampled Cr:Cb plane, 10 bit per channel"/> 408 <entry name="p010" value="0x30313050" summary="2x2 subsampled Cr:Cb plane 10 bits per channel"/> 409 <entry name="p012" value="0x32313050" summary="2x2 subsampled Cr:Cb plane 12 bits per channel"/> 410 <entry name="p016" value="0x36313050" summary="2x2 subsampled Cr:Cb plane 16 bits per channel"/> 411 <entry name="axbxgxrx106106106106" value="0x30314241" summary="[63:0] A:x:B:x:G:x:R:x 10:6:10:6:10:6:10:6 little endian"/> 412 <entry name="nv15" value="0x3531564e" summary="2x2 subsampled Cr:Cb plane"/> 413 <entry name="q410" value="0x30313451"/> 414 <entry name="q401" value="0x31303451"/> 415 <entry name="xrgb16161616" value="0x38345258" summary="[63:0] x:R:G:B 16:16:16:16 little endian"/> 416 <entry name="xbgr16161616" value="0x38344258" summary="[63:0] x:B:G:R 16:16:16:16 little endian"/> 417 <entry name="argb16161616" value="0x38345241" summary="[63:0] A:R:G:B 16:16:16:16 little endian"/> 418 <entry name="abgr16161616" value="0x38344241" summary="[63:0] A:B:G:R 16:16:16:16 little endian"/> 419 </enum> 420 421 <request name="create_pool"> 422 <description summary="create a shm pool"> 423 Create a new wl_shm_pool object. 424 425 The pool can be used to create shared memory based buffer 426 objects. The server will mmap size bytes of the passed file 427 descriptor, to use as backing memory for the pool. 428 </description> 429 <arg name="id" type="new_id" interface="wl_shm_pool" summary="pool to create"/> 430 <arg name="fd" type="fd" summary="file descriptor for the pool"/> 431 <arg name="size" type="int" summary="pool size, in bytes"/> 432 </request> 433 434 <event name="format"> 435 <description summary="pixel format description"> 436 Informs the client about a valid pixel format that 437 can be used for buffers. Known formats include 438 argb8888 and xrgb8888. 439 </description> 440 <arg name="format" type="uint" enum="format" summary="buffer pixel format"/> 441 </event> 442 </interface> 443 444 <interface name="wl_buffer" version="1"> 445 <description summary="content for a wl_surface"> 446 A buffer provides the content for a wl_surface. Buffers are 447 created through factory interfaces such as wl_shm, wp_linux_buffer_params 448 (from the linux-dmabuf protocol extension) or similar. It has a width and 449 a height and can be attached to a wl_surface, but the mechanism by which a 450 client provides and updates the contents is defined by the buffer factory 451 interface. 452 453 If the buffer uses a format that has an alpha channel, the alpha channel 454 is assumed to be premultiplied in the color channels unless otherwise 455 specified. 456 </description> 457 458 <request name="destroy" type="destructor"> 459 <description summary="destroy a buffer"> 460 Destroy a buffer. If and how you need to release the backing 461 storage is defined by the buffer factory interface. 462 463 For possible side-effects to a surface, see wl_surface.attach. 464 </description> 465 </request> 466 467 <event name="release"> 468 <description summary="compositor releases buffer"> 469 Sent when this wl_buffer is no longer used by the compositor. 470 The client is now free to reuse or destroy this buffer and its 471 backing storage. 472 473 If a client receives a release event before the frame callback 474 requested in the same wl_surface.commit that attaches this 475 wl_buffer to a surface, then the client is immediately free to 476 reuse the buffer and its backing storage, and does not need a 477 second buffer for the next surface content update. Typically 478 this is possible, when the compositor maintains a copy of the 479 wl_surface contents, e.g. as a GL texture. This is an important 480 optimization for GL(ES) compositors with wl_shm clients. 481 </description> 482 </event> 483 </interface> 484 485 <interface name="wl_data_offer" version="3"> 486 <description summary="offer to transfer data"> 487 A wl_data_offer represents a piece of data offered for transfer 488 by another client (the source client). It is used by the 489 copy-and-paste and drag-and-drop mechanisms. The offer 490 describes the different mime types that the data can be 491 converted to and provides the mechanism for transferring the 492 data directly from the source client. 493 </description> 494 495 <enum name="error"> 496 <entry name="invalid_finish" value="0" 497 summary="finish request was called untimely"/> 498 <entry name="invalid_action_mask" value="1" 499 summary="action mask contains invalid values"/> 500 <entry name="invalid_action" value="2" 501 summary="action argument has an invalid value"/> 502 <entry name="invalid_offer" value="3" 503 summary="offer doesn't accept this request"/> 504 </enum> 505 506 <request name="accept"> 507 <description summary="accept one of the offered mime types"> 508 Indicate that the client can accept the given mime type, or 509 NULL for not accepted. 510 511 For objects of version 2 or older, this request is used by the 512 client to give feedback whether the client can receive the given 513 mime type, or NULL if none is accepted; the feedback does not 514 determine whether the drag-and-drop operation succeeds or not. 515 516 For objects of version 3 or newer, this request determines the 517 final result of the drag-and-drop operation. If the end result 518 is that no mime types were accepted, the drag-and-drop operation 519 will be cancelled and the corresponding drag source will receive 520 wl_data_source.cancelled. Clients may still use this event in 521 conjunction with wl_data_source.action for feedback. 522 </description> 523 <arg name="serial" type="uint" summary="serial number of the accept request"/> 524 <arg name="mime_type" type="string" allow-null="true" summary="mime type accepted by the client"/> 525 </request> 526 527 <request name="receive"> 528 <description summary="request that the data is transferred"> 529 To transfer the offered data, the client issues this request 530 and indicates the mime type it wants to receive. The transfer 531 happens through the passed file descriptor (typically created 532 with the pipe system call). The source client writes the data 533 in the mime type representation requested and then closes the 534 file descriptor. 535 536 The receiving client reads from the read end of the pipe until 537 EOF and then closes its end, at which point the transfer is 538 complete. 539 540 This request may happen multiple times for different mime types, 541 both before and after wl_data_device.drop. Drag-and-drop destination 542 clients may preemptively fetch data or examine it more closely to 543 determine acceptance. 544 </description> 545 <arg name="mime_type" type="string" summary="mime type desired by receiver"/> 546 <arg name="fd" type="fd" summary="file descriptor for data transfer"/> 547 </request> 548 549 <request name="destroy" type="destructor"> 550 <description summary="destroy data offer"> 551 Destroy the data offer. 552 </description> 553 </request> 554 555 <event name="offer"> 556 <description summary="advertise offered mime type"> 557 Sent immediately after creating the wl_data_offer object. One 558 event per offered mime type. 559 </description> 560 <arg name="mime_type" type="string" summary="offered mime type"/> 561 </event> 562 563 <!-- Version 3 additions --> 564 565 <request name="finish" since="3"> 566 <description summary="the offer will no longer be used"> 567 Notifies the compositor that the drag destination successfully 568 finished the drag-and-drop operation. 569 570 Upon receiving this request, the compositor will emit 571 wl_data_source.dnd_finished on the drag source client. 572 573 It is a client error to perform other requests than 574 wl_data_offer.destroy after this one. It is also an error to perform 575 this request after a NULL mime type has been set in 576 wl_data_offer.accept or no action was received through 577 wl_data_offer.action. 578 579 If wl_data_offer.finish request is received for a non drag and drop 580 operation, the invalid_finish protocol error is raised. 581 </description> 582 </request> 583 584 <request name="set_actions" since="3"> 585 <description summary="set the available/preferred drag-and-drop actions"> 586 Sets the actions that the destination side client supports for 587 this operation. This request may trigger the emission of 588 wl_data_source.action and wl_data_offer.action events if the compositor 589 needs to change the selected action. 590 591 This request can be called multiple times throughout the 592 drag-and-drop operation, typically in response to wl_data_device.enter 593 or wl_data_device.motion events. 594 595 This request determines the final result of the drag-and-drop 596 operation. If the end result is that no action is accepted, 597 the drag source will receive wl_data_source.cancelled. 598 599 The dnd_actions argument must contain only values expressed in the 600 wl_data_device_manager.dnd_actions enum, and the preferred_action 601 argument must only contain one of those values set, otherwise it 602 will result in a protocol error. 603 604 While managing an "ask" action, the destination drag-and-drop client 605 may perform further wl_data_offer.receive requests, and is expected 606 to perform one last wl_data_offer.set_actions request with a preferred 607 action other than "ask" (and optionally wl_data_offer.accept) before 608 requesting wl_data_offer.finish, in order to convey the action selected 609 by the user. If the preferred action is not in the 610 wl_data_offer.source_actions mask, an error will be raised. 611 612 If the "ask" action is dismissed (e.g. user cancellation), the client 613 is expected to perform wl_data_offer.destroy right away. 614 615 This request can only be made on drag-and-drop offers, a protocol error 616 will be raised otherwise. 617 </description> 618 <arg name="dnd_actions" type="uint" summary="actions supported by the destination client" 619 enum="wl_data_device_manager.dnd_action"/> 620 <arg name="preferred_action" type="uint" summary="action preferred by the destination client" 621 enum="wl_data_device_manager.dnd_action"/> 622 </request> 623 624 <event name="source_actions" since="3"> 625 <description summary="notify the source-side available actions"> 626 This event indicates the actions offered by the data source. It 627 will be sent right after wl_data_device.enter, or anytime the source 628 side changes its offered actions through wl_data_source.set_actions. 629 </description> 630 <arg name="source_actions" type="uint" summary="actions offered by the data source" 631 enum="wl_data_device_manager.dnd_action"/> 632 </event> 633 634 <event name="action" since="3"> 635 <description summary="notify the selected action"> 636 This event indicates the action selected by the compositor after 637 matching the source/destination side actions. Only one action (or 638 none) will be offered here. 639 640 This event can be emitted multiple times during the drag-and-drop 641 operation in response to destination side action changes through 642 wl_data_offer.set_actions. 643 644 This event will no longer be emitted after wl_data_device.drop 645 happened on the drag-and-drop destination, the client must 646 honor the last action received, or the last preferred one set 647 through wl_data_offer.set_actions when handling an "ask" action. 648 649 Compositors may also change the selected action on the fly, mainly 650 in response to keyboard modifier changes during the drag-and-drop 651 operation. 652 653 The most recent action received is always the valid one. Prior to 654 receiving wl_data_device.drop, the chosen action may change (e.g. 655 due to keyboard modifiers being pressed). At the time of receiving 656 wl_data_device.drop the drag-and-drop destination must honor the 657 last action received. 658 659 Action changes may still happen after wl_data_device.drop, 660 especially on "ask" actions, where the drag-and-drop destination 661 may choose another action afterwards. Action changes happening 662 at this stage are always the result of inter-client negotiation, the 663 compositor shall no longer be able to induce a different action. 664 665 Upon "ask" actions, it is expected that the drag-and-drop destination 666 may potentially choose a different action and/or mime type, 667 based on wl_data_offer.source_actions and finally chosen by the 668 user (e.g. popping up a menu with the available options). The 669 final wl_data_offer.set_actions and wl_data_offer.accept requests 670 must happen before the call to wl_data_offer.finish. 671 </description> 672 <arg name="dnd_action" type="uint" summary="action selected by the compositor" 673 enum="wl_data_device_manager.dnd_action"/> 674 </event> 675 </interface> 676 677 <interface name="wl_data_source" version="3"> 678 <description summary="offer to transfer data"> 679 The wl_data_source object is the source side of a wl_data_offer. 680 It is created by the source client in a data transfer and 681 provides a way to describe the offered data and a way to respond 682 to requests to transfer the data. 683 </description> 684 685 <enum name="error"> 686 <entry name="invalid_action_mask" value="0" 687 summary="action mask contains invalid values"/> 688 <entry name="invalid_source" value="1" 689 summary="source doesn't accept this request"/> 690 </enum> 691 692 <request name="offer"> 693 <description summary="add an offered mime type"> 694 This request adds a mime type to the set of mime types 695 advertised to targets. Can be called several times to offer 696 multiple types. 697 </description> 698 <arg name="mime_type" type="string" summary="mime type offered by the data source"/> 699 </request> 700 701 <request name="destroy" type="destructor"> 702 <description summary="destroy the data source"> 703 Destroy the data source. 704 </description> 705 </request> 706 707 <event name="target"> 708 <description summary="a target accepts an offered mime type"> 709 Sent when a target accepts pointer_focus or motion events. If 710 a target does not accept any of the offered types, type is NULL. 711 712 Used for feedback during drag-and-drop. 713 </description> 714 <arg name="mime_type" type="string" allow-null="true" summary="mime type accepted by the target"/> 715 </event> 716 717 <event name="send"> 718 <description summary="send the data"> 719 Request for data from the client. Send the data as the 720 specified mime type over the passed file descriptor, then 721 close it. 722 </description> 723 <arg name="mime_type" type="string" summary="mime type for the data"/> 724 <arg name="fd" type="fd" summary="file descriptor for the data"/> 725 </event> 726 727 <event name="cancelled"> 728 <description summary="selection was cancelled"> 729 This data source is no longer valid. There are several reasons why 730 this could happen: 731 732 - The data source has been replaced by another data source. 733 - The drag-and-drop operation was performed, but the drop destination 734 did not accept any of the mime types offered through 735 wl_data_source.target. 736 - The drag-and-drop operation was performed, but the drop destination 737 did not select any of the actions present in the mask offered through 738 wl_data_source.action. 739 - The drag-and-drop operation was performed but didn't happen over a 740 surface. 741 - The compositor cancelled the drag-and-drop operation (e.g. compositor 742 dependent timeouts to avoid stale drag-and-drop transfers). 743 744 The client should clean up and destroy this data source. 745 746 For objects of version 2 or older, wl_data_source.cancelled will 747 only be emitted if the data source was replaced by another data 748 source. 749 </description> 750 </event> 751 752 <!-- Version 3 additions --> 753 754 <request name="set_actions" since="3"> 755 <description summary="set the available drag-and-drop actions"> 756 Sets the actions that the source side client supports for this 757 operation. This request may trigger wl_data_source.action and 758 wl_data_offer.action events if the compositor needs to change the 759 selected action. 760 761 The dnd_actions argument must contain only values expressed in the 762 wl_data_device_manager.dnd_actions enum, otherwise it will result 763 in a protocol error. 764 765 This request must be made once only, and can only be made on sources 766 used in drag-and-drop, so it must be performed before 767 wl_data_device.start_drag. Attempting to use the source other than 768 for drag-and-drop will raise a protocol error. 769 </description> 770 <arg name="dnd_actions" type="uint" summary="actions supported by the data source" 771 enum="wl_data_device_manager.dnd_action"/> 772 </request> 773 774 <event name="dnd_drop_performed" since="3"> 775 <description summary="the drag-and-drop operation physically finished"> 776 The user performed the drop action. This event does not indicate 777 acceptance, wl_data_source.cancelled may still be emitted afterwards 778 if the drop destination does not accept any mime type. 779 780 However, this event might however not be received if the compositor 781 cancelled the drag-and-drop operation before this event could happen. 782 783 Note that the data_source may still be used in the future and should 784 not be destroyed here. 785 </description> 786 </event> 787 788 <event name="dnd_finished" since="3"> 789 <description summary="the drag-and-drop operation concluded"> 790 The drop destination finished interoperating with this data 791 source, so the client is now free to destroy this data source and 792 free all associated data. 793 794 If the action used to perform the operation was "move", the 795 source can now delete the transferred data. 796 </description> 797 </event> 798 799 <event name="action" since="3"> 800 <description summary="notify the selected action"> 801 This event indicates the action selected by the compositor after 802 matching the source/destination side actions. Only one action (or 803 none) will be offered here. 804 805 This event can be emitted multiple times during the drag-and-drop 806 operation, mainly in response to destination side changes through 807 wl_data_offer.set_actions, and as the data device enters/leaves 808 surfaces. 809 810 It is only possible to receive this event after 811 wl_data_source.dnd_drop_performed if the drag-and-drop operation 812 ended in an "ask" action, in which case the final wl_data_source.action 813 event will happen immediately before wl_data_source.dnd_finished. 814 815 Compositors may also change the selected action on the fly, mainly 816 in response to keyboard modifier changes during the drag-and-drop 817 operation. 818 819 The most recent action received is always the valid one. The chosen 820 action may change alongside negotiation (e.g. an "ask" action can turn 821 into a "move" operation), so the effects of the final action must 822 always be applied in wl_data_offer.dnd_finished. 823 824 Clients can trigger cursor surface changes from this point, so 825 they reflect the current action. 826 </description> 827 <arg name="dnd_action" type="uint" summary="action selected by the compositor" 828 enum="wl_data_device_manager.dnd_action"/> 829 </event> 830 </interface> 831 832 <interface name="wl_data_device" version="3"> 833 <description summary="data transfer device"> 834 There is one wl_data_device per seat which can be obtained 835 from the global wl_data_device_manager singleton. 836 837 A wl_data_device provides access to inter-client data transfer 838 mechanisms such as copy-and-paste and drag-and-drop. 839 </description> 840 841 <enum name="error"> 842 <entry name="role" value="0" summary="given wl_surface has another role"/> 843 </enum> 844 845 <request name="start_drag"> 846 <description summary="start drag-and-drop operation"> 847 This request asks the compositor to start a drag-and-drop 848 operation on behalf of the client. 849 850 The source argument is the data source that provides the data 851 for the eventual data transfer. If source is NULL, enter, leave 852 and motion events are sent only to the client that initiated the 853 drag and the client is expected to handle the data passing 854 internally. If source is destroyed, the drag-and-drop session will be 855 cancelled. 856 857 The origin surface is the surface where the drag originates and 858 the client must have an active implicit grab that matches the 859 serial. 860 861 The icon surface is an optional (can be NULL) surface that 862 provides an icon to be moved around with the cursor. Initially, 863 the top-left corner of the icon surface is placed at the cursor 864 hotspot, but subsequent wl_surface.attach request can move the 865 relative position. Attach requests must be confirmed with 866 wl_surface.commit as usual. The icon surface is given the role of 867 a drag-and-drop icon. If the icon surface already has another role, 868 it raises a protocol error. 869 870 The current and pending input regions of the icon wl_surface are 871 cleared, and wl_surface.set_input_region is ignored until the 872 wl_surface is no longer used as the icon surface. When the use 873 as an icon ends, the current and pending input regions become 874 undefined, and the wl_surface is unmapped. 875 </description> 876 <arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the eventual transfer"/> 877 <arg name="origin" type="object" interface="wl_surface" summary="surface where the drag originates"/> 878 <arg name="icon" type="object" interface="wl_surface" allow-null="true" summary="drag-and-drop icon surface"/> 879 <arg name="serial" type="uint" summary="serial number of the implicit grab on the origin"/> 880 </request> 881 882 <request name="set_selection"> 883 <description summary="copy data to the selection"> 884 This request asks the compositor to set the selection 885 to the data from the source on behalf of the client. 886 887 To unset the selection, set the source to NULL. 888 </description> 889 <arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the selection"/> 890 <arg name="serial" type="uint" summary="serial number of the event that triggered this request"/> 891 </request> 892 893 <event name="data_offer"> 894 <description summary="introduce a new wl_data_offer"> 895 The data_offer event introduces a new wl_data_offer object, 896 which will subsequently be used in either the 897 data_device.enter event (for drag-and-drop) or the 898 data_device.selection event (for selections). Immediately 899 following the data_device.data_offer event, the new data_offer 900 object will send out data_offer.offer events to describe the 901 mime types it offers. 902 </description> 903 <arg name="id" type="new_id" interface="wl_data_offer" summary="the new data_offer object"/> 904 </event> 905 906 <event name="enter"> 907 <description summary="initiate drag-and-drop session"> 908 This event is sent when an active drag-and-drop pointer enters 909 a surface owned by the client. The position of the pointer at 910 enter time is provided by the x and y arguments, in surface-local 911 coordinates. 912 </description> 913 <arg name="serial" type="uint" summary="serial number of the enter event"/> 914 <arg name="surface" type="object" interface="wl_surface" summary="client surface entered"/> 915 <arg name="x" type="fixed" summary="surface-local x coordinate"/> 916 <arg name="y" type="fixed" summary="surface-local y coordinate"/> 917 <arg name="id" type="object" interface="wl_data_offer" allow-null="true" 918 summary="source data_offer object"/> 919 </event> 920 921 <event name="leave"> 922 <description summary="end drag-and-drop session"> 923 This event is sent when the drag-and-drop pointer leaves the 924 surface and the session ends. The client must destroy the 925 wl_data_offer introduced at enter time at this point. 926 </description> 927 </event> 928 929 <event name="motion"> 930 <description summary="drag-and-drop session motion"> 931 This event is sent when the drag-and-drop pointer moves within 932 the currently focused surface. The new position of the pointer 933 is provided by the x and y arguments, in surface-local 934 coordinates. 935 </description> 936 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 937 <arg name="x" type="fixed" summary="surface-local x coordinate"/> 938 <arg name="y" type="fixed" summary="surface-local y coordinate"/> 939 </event> 940 941 <event name="drop"> 942 <description summary="end drag-and-drop session successfully"> 943 The event is sent when a drag-and-drop operation is ended 944 because the implicit grab is removed. 945 946 The drag-and-drop destination is expected to honor the last action 947 received through wl_data_offer.action, if the resulting action is 948 "copy" or "move", the destination can still perform 949 wl_data_offer.receive requests, and is expected to end all 950 transfers with a wl_data_offer.finish request. 951 952 If the resulting action is "ask", the action will not be considered 953 final. The drag-and-drop destination is expected to perform one last 954 wl_data_offer.set_actions request, or wl_data_offer.destroy in order 955 to cancel the operation. 956 </description> 957 </event> 958 959 <event name="selection"> 960 <description summary="advertise new selection"> 961 The selection event is sent out to notify the client of a new 962 wl_data_offer for the selection for this device. The 963 data_device.data_offer and the data_offer.offer events are 964 sent out immediately before this event to introduce the data 965 offer object. The selection event is sent to a client 966 immediately before receiving keyboard focus and when a new 967 selection is set while the client has keyboard focus. The 968 data_offer is valid until a new data_offer or NULL is received 969 or until the client loses keyboard focus. Switching surface with 970 keyboard focus within the same client doesn't mean a new selection 971 will be sent. The client must destroy the previous selection 972 data_offer, if any, upon receiving this event. 973 </description> 974 <arg name="id" type="object" interface="wl_data_offer" allow-null="true" 975 summary="selection data_offer object"/> 976 </event> 977 978 <!-- Version 2 additions --> 979 980 <request name="release" type="destructor" since="2"> 981 <description summary="destroy data device"> 982 This request destroys the data device. 983 </description> 984 </request> 985 </interface> 986 987 <interface name="wl_data_device_manager" version="3"> 988 <description summary="data transfer interface"> 989 The wl_data_device_manager is a singleton global object that 990 provides access to inter-client data transfer mechanisms such as 991 copy-and-paste and drag-and-drop. These mechanisms are tied to 992 a wl_seat and this interface lets a client get a wl_data_device 993 corresponding to a wl_seat. 994 995 Depending on the version bound, the objects created from the bound 996 wl_data_device_manager object will have different requirements for 997 functioning properly. See wl_data_source.set_actions, 998 wl_data_offer.accept and wl_data_offer.finish for details. 999 </description> 1000 1001 <request name="create_data_source"> 1002 <description summary="create a new data source"> 1003 Create a new data source. 1004 </description> 1005 <arg name="id" type="new_id" interface="wl_data_source" summary="data source to create"/> 1006 </request> 1007 1008 <request name="get_data_device"> 1009 <description summary="create a new data device"> 1010 Create a new data device for a given seat. 1011 </description> 1012 <arg name="id" type="new_id" interface="wl_data_device" summary="data device to create"/> 1013 <arg name="seat" type="object" interface="wl_seat" summary="seat associated with the data device"/> 1014 </request> 1015 1016 <!-- Version 3 additions --> 1017 1018 <enum name="dnd_action" bitfield="true" since="3"> 1019 <description summary="drag and drop actions"> 1020 This is a bitmask of the available/preferred actions in a 1021 drag-and-drop operation. 1022 1023 In the compositor, the selected action is a result of matching the 1024 actions offered by the source and destination sides. "action" events 1025 with a "none" action will be sent to both source and destination if 1026 there is no match. All further checks will effectively happen on 1027 (source actions ∩ destination actions). 1028 1029 In addition, compositors may also pick different actions in 1030 reaction to key modifiers being pressed. One common design that 1031 is used in major toolkits (and the behavior recommended for 1032 compositors) is: 1033 1034 - If no modifiers are pressed, the first match (in bit order) 1035 will be used. 1036 - Pressing Shift selects "move", if enabled in the mask. 1037 - Pressing Control selects "copy", if enabled in the mask. 1038 1039 Behavior beyond that is considered implementation-dependent. 1040 Compositors may for example bind other modifiers (like Alt/Meta) 1041 or drags initiated with other buttons than BTN_LEFT to specific 1042 actions (e.g. "ask"). 1043 </description> 1044 <entry name="none" value="0" summary="no action"/> 1045 <entry name="copy" value="1" summary="copy action"/> 1046 <entry name="move" value="2" summary="move action"/> 1047 <entry name="ask" value="4" summary="ask action"/> 1048 </enum> 1049 </interface> 1050 1051 <interface name="wl_shell" version="1"> 1052 <description summary="create desktop-style surfaces"> 1053 This interface is implemented by servers that provide 1054 desktop-style user interfaces. 1055 1056 It allows clients to associate a wl_shell_surface with 1057 a basic surface. 1058 1059 Note! This protocol is deprecated and not intended for production use. 1060 For desktop-style user interfaces, use xdg_shell. Compositors and clients 1061 should not implement this interface. 1062 </description> 1063 1064 <enum name="error"> 1065 <entry name="role" value="0" summary="given wl_surface has another role"/> 1066 </enum> 1067 1068 <request name="get_shell_surface"> 1069 <description summary="create a shell surface from a surface"> 1070 Create a shell surface for an existing surface. This gives 1071 the wl_surface the role of a shell surface. If the wl_surface 1072 already has another role, it raises a protocol error. 1073 1074 Only one shell surface can be associated with a given surface. 1075 </description> 1076 <arg name="id" type="new_id" interface="wl_shell_surface" summary="shell surface to create"/> 1077 <arg name="surface" type="object" interface="wl_surface" summary="surface to be given the shell surface role"/> 1078 </request> 1079 </interface> 1080 1081 <interface name="wl_shell_surface" version="1"> 1082 <description summary="desktop-style metadata interface"> 1083 An interface that may be implemented by a wl_surface, for 1084 implementations that provide a desktop-style user interface. 1085 1086 It provides requests to treat surfaces like toplevel, fullscreen 1087 or popup windows, move, resize or maximize them, associate 1088 metadata like title and class, etc. 1089 1090 On the server side the object is automatically destroyed when 1091 the related wl_surface is destroyed. On the client side, 1092 wl_shell_surface_destroy() must be called before destroying 1093 the wl_surface object. 1094 </description> 1095 1096 <request name="pong"> 1097 <description summary="respond to a ping event"> 1098 A client must respond to a ping event with a pong request or 1099 the client may be deemed unresponsive. 1100 </description> 1101 <arg name="serial" type="uint" summary="serial number of the ping event"/> 1102 </request> 1103 1104 <request name="move"> 1105 <description summary="start an interactive move"> 1106 Start a pointer-driven move of the surface. 1107 1108 This request must be used in response to a button press event. 1109 The server may ignore move requests depending on the state of 1110 the surface (e.g. fullscreen or maximized). 1111 </description> 1112 <arg name="seat" type="object" interface="wl_seat" summary="seat whose pointer is used"/> 1113 <arg name="serial" type="uint" summary="serial number of the implicit grab on the pointer"/> 1114 </request> 1115 1116 <enum name="resize" bitfield="true"> 1117 <description summary="edge values for resizing"> 1118 These values are used to indicate which edge of a surface 1119 is being dragged in a resize operation. The server may 1120 use this information to adapt its behavior, e.g. choose 1121 an appropriate cursor image. 1122 </description> 1123 <entry name="none" value="0" summary="no edge"/> 1124 <entry name="top" value="1" summary="top edge"/> 1125 <entry name="bottom" value="2" summary="bottom edge"/> 1126 <entry name="left" value="4" summary="left edge"/> 1127 <entry name="top_left" value="5" summary="top and left edges"/> 1128 <entry name="bottom_left" value="6" summary="bottom and left edges"/> 1129 <entry name="right" value="8" summary="right edge"/> 1130 <entry name="top_right" value="9" summary="top and right edges"/> 1131 <entry name="bottom_right" value="10" summary="bottom and right edges"/> 1132 </enum> 1133 1134 <request name="resize"> 1135 <description summary="start an interactive resize"> 1136 Start a pointer-driven resizing of the surface. 1137 1138 This request must be used in response to a button press event. 1139 The server may ignore resize requests depending on the state of 1140 the surface (e.g. fullscreen or maximized). 1141 </description> 1142 <arg name="seat" type="object" interface="wl_seat" summary="seat whose pointer is used"/> 1143 <arg name="serial" type="uint" summary="serial number of the implicit grab on the pointer"/> 1144 <arg name="edges" type="uint" enum="resize" summary="which edge or corner is being dragged"/> 1145 </request> 1146 1147 <request name="set_toplevel"> 1148 <description summary="make the surface a toplevel surface"> 1149 Map the surface as a toplevel surface. 1150 1151 A toplevel surface is not fullscreen, maximized or transient. 1152 </description> 1153 </request> 1154 1155 <enum name="transient" bitfield="true"> 1156 <description summary="details of transient behaviour"> 1157 These flags specify details of the expected behaviour 1158 of transient surfaces. Used in the set_transient request. 1159 </description> 1160 <entry name="inactive" value="0x1" summary="do not set keyboard focus"/> 1161 </enum> 1162 1163 <request name="set_transient"> 1164 <description summary="make the surface a transient surface"> 1165 Map the surface relative to an existing surface. 1166 1167 The x and y arguments specify the location of the upper left 1168 corner of the surface relative to the upper left corner of the 1169 parent surface, in surface-local coordinates. 1170 1171 The flags argument controls details of the transient behaviour. 1172 </description> 1173 <arg name="parent" type="object" interface="wl_surface" summary="parent surface"/> 1174 <arg name="x" type="int" summary="surface-local x coordinate"/> 1175 <arg name="y" type="int" summary="surface-local y coordinate"/> 1176 <arg name="flags" type="uint" enum="transient" summary="transient surface behavior"/> 1177 </request> 1178 1179 <enum name="fullscreen_method"> 1180 <description summary="different method to set the surface fullscreen"> 1181 Hints to indicate to the compositor how to deal with a conflict 1182 between the dimensions of the surface and the dimensions of the 1183 output. The compositor is free to ignore this parameter. 1184 </description> 1185 <entry name="default" value="0" summary="no preference, apply default policy"/> 1186 <entry name="scale" value="1" summary="scale, preserve the surface's aspect ratio and center on output"/> 1187 <entry name="driver" value="2" summary="switch output mode to the smallest mode that can fit the surface, add black borders to compensate size mismatch"/> 1188 <entry name="fill" value="3" summary="no upscaling, center on output and add black borders to compensate size mismatch"/> 1189 </enum> 1190 1191 <request name="set_fullscreen"> 1192 <description summary="make the surface a fullscreen surface"> 1193 Map the surface as a fullscreen surface. 1194 1195 If an output parameter is given then the surface will be made 1196 fullscreen on that output. If the client does not specify the 1197 output then the compositor will apply its policy - usually 1198 choosing the output on which the surface has the biggest surface 1199 area. 1200 1201 The client may specify a method to resolve a size conflict 1202 between the output size and the surface size - this is provided 1203 through the method parameter. 1204 1205 The framerate parameter is used only when the method is set 1206 to "driver", to indicate the preferred framerate. A value of 0 1207 indicates that the client does not care about framerate. The 1208 framerate is specified in mHz, that is framerate of 60000 is 60Hz. 1209 1210 A method of "scale" or "driver" implies a scaling operation of 1211 the surface, either via a direct scaling operation or a change of 1212 the output mode. This will override any kind of output scaling, so 1213 that mapping a surface with a buffer size equal to the mode can 1214 fill the screen independent of buffer_scale. 1215 1216 A method of "fill" means we don't scale up the buffer, however 1217 any output scale is applied. This means that you may run into 1218 an edge case where the application maps a buffer with the same 1219 size of the output mode but buffer_scale 1 (thus making a 1220 surface larger than the output). In this case it is allowed to 1221 downscale the results to fit the screen. 1222 1223 The compositor must reply to this request with a configure event 1224 with the dimensions for the output on which the surface will 1225 be made fullscreen. 1226 </description> 1227 <arg name="method" type="uint" enum="fullscreen_method" summary="method for resolving size conflict"/> 1228 <arg name="framerate" type="uint" summary="framerate in mHz"/> 1229 <arg name="output" type="object" interface="wl_output" allow-null="true" 1230 summary="output on which the surface is to be fullscreen"/> 1231 </request> 1232 1233 <request name="set_popup"> 1234 <description summary="make the surface a popup surface"> 1235 Map the surface as a popup. 1236 1237 A popup surface is a transient surface with an added pointer 1238 grab. 1239 1240 An existing implicit grab will be changed to owner-events mode, 1241 and the popup grab will continue after the implicit grab ends 1242 (i.e. releasing the mouse button does not cause the popup to 1243 be unmapped). 1244 1245 The popup grab continues until the window is destroyed or a 1246 mouse button is pressed in any other client's window. A click 1247 in any of the client's surfaces is reported as normal, however, 1248 clicks in other clients' surfaces will be discarded and trigger 1249 the callback. 1250 1251 The x and y arguments specify the location of the upper left 1252 corner of the surface relative to the upper left corner of the 1253 parent surface, in surface-local coordinates. 1254 </description> 1255 <arg name="seat" type="object" interface="wl_seat" summary="seat whose pointer is used"/> 1256 <arg name="serial" type="uint" summary="serial number of the implicit grab on the pointer"/> 1257 <arg name="parent" type="object" interface="wl_surface" summary="parent surface"/> 1258 <arg name="x" type="int" summary="surface-local x coordinate"/> 1259 <arg name="y" type="int" summary="surface-local y coordinate"/> 1260 <arg name="flags" type="uint" enum="transient" summary="transient surface behavior"/> 1261 </request> 1262 1263 <request name="set_maximized"> 1264 <description summary="make the surface a maximized surface"> 1265 Map the surface as a maximized surface. 1266 1267 If an output parameter is given then the surface will be 1268 maximized on that output. If the client does not specify the 1269 output then the compositor will apply its policy - usually 1270 choosing the output on which the surface has the biggest surface 1271 area. 1272 1273 The compositor will reply with a configure event telling 1274 the expected new surface size. The operation is completed 1275 on the next buffer attach to this surface. 1276 1277 A maximized surface typically fills the entire output it is 1278 bound to, except for desktop elements such as panels. This is 1279 the main difference between a maximized shell surface and a 1280 fullscreen shell surface. 1281 1282 The details depend on the compositor implementation. 1283 </description> 1284 <arg name="output" type="object" interface="wl_output" allow-null="true" 1285 summary="output on which the surface is to be maximized"/> 1286 </request> 1287 1288 <request name="set_title"> 1289 <description summary="set surface title"> 1290 Set a short title for the surface. 1291 1292 This string may be used to identify the surface in a task bar, 1293 window list, or other user interface elements provided by the 1294 compositor. 1295 1296 The string must be encoded in UTF-8. 1297 </description> 1298 <arg name="title" type="string" summary="surface title"/> 1299 </request> 1300 1301 <request name="set_class"> 1302 <description summary="set surface class"> 1303 Set a class for the surface. 1304 1305 The surface class identifies the general class of applications 1306 to which the surface belongs. A common convention is to use the 1307 file name (or the full path if it is a non-standard location) of 1308 the application's .desktop file as the class. 1309 </description> 1310 <arg name="class_" type="string" summary="surface class"/> 1311 </request> 1312 1313 <event name="ping"> 1314 <description summary="ping client"> 1315 Ping a client to check if it is receiving events and sending 1316 requests. A client is expected to reply with a pong request. 1317 </description> 1318 <arg name="serial" type="uint" summary="serial number of the ping"/> 1319 </event> 1320 1321 <event name="configure"> 1322 <description summary="suggest resize"> 1323 The configure event asks the client to resize its surface. 1324 1325 The size is a hint, in the sense that the client is free to 1326 ignore it if it doesn't resize, pick a smaller size (to 1327 satisfy aspect ratio or resize in steps of NxM pixels). 1328 1329 The edges parameter provides a hint about how the surface 1330 was resized. The client may use this information to decide 1331 how to adjust its content to the new size (e.g. a scrolling 1332 area might adjust its content position to leave the viewable 1333 content unmoved). 1334 1335 The client is free to dismiss all but the last configure 1336 event it received. 1337 1338 The width and height arguments specify the size of the window 1339 in surface-local coordinates. 1340 </description> 1341 <arg name="edges" type="uint" enum="resize" summary="how the surface was resized"/> 1342 <arg name="width" type="int" summary="new width of the surface"/> 1343 <arg name="height" type="int" summary="new height of the surface"/> 1344 </event> 1345 1346 <event name="popup_done"> 1347 <description summary="popup interaction is done"> 1348 The popup_done event is sent out when a popup grab is broken, 1349 that is, when the user clicks a surface that doesn't belong 1350 to the client owning the popup surface. 1351 </description> 1352 </event> 1353 </interface> 1354 1355 <interface name="wl_surface" version="5"> 1356 <description summary="an onscreen surface"> 1357 A surface is a rectangular area that may be displayed on zero 1358 or more outputs, and shown any number of times at the compositor's 1359 discretion. They can present wl_buffers, receive user input, and 1360 define a local coordinate system. 1361 1362 The size of a surface (and relative positions on it) is described 1363 in surface-local coordinates, which may differ from the buffer 1364 coordinates of the pixel content, in case a buffer_transform 1365 or a buffer_scale is used. 1366 1367 A surface without a "role" is fairly useless: a compositor does 1368 not know where, when or how to present it. The role is the 1369 purpose of a wl_surface. Examples of roles are a cursor for a 1370 pointer (as set by wl_pointer.set_cursor), a drag icon 1371 (wl_data_device.start_drag), a sub-surface 1372 (wl_subcompositor.get_subsurface), and a window as defined by a 1373 shell protocol (e.g. wl_shell.get_shell_surface). 1374 1375 A surface can have only one role at a time. Initially a 1376 wl_surface does not have a role. Once a wl_surface is given a 1377 role, it is set permanently for the whole lifetime of the 1378 wl_surface object. Giving the current role again is allowed, 1379 unless explicitly forbidden by the relevant interface 1380 specification. 1381 1382 Surface roles are given by requests in other interfaces such as 1383 wl_pointer.set_cursor. The request should explicitly mention 1384 that this request gives a role to a wl_surface. Often, this 1385 request also creates a new protocol object that represents the 1386 role and adds additional functionality to wl_surface. When a 1387 client wants to destroy a wl_surface, they must destroy this 'role 1388 object' before the wl_surface. 1389 1390 Destroying the role object does not remove the role from the 1391 wl_surface, but it may stop the wl_surface from "playing the role". 1392 For instance, if a wl_subsurface object is destroyed, the wl_surface 1393 it was created for will be unmapped and forget its position and 1394 z-order. It is allowed to create a wl_subsurface for the same 1395 wl_surface again, but it is not allowed to use the wl_surface as 1396 a cursor (cursor is a different role than sub-surface, and role 1397 switching is not allowed). 1398 </description> 1399 1400 <enum name="error"> 1401 <description summary="wl_surface error values"> 1402 These errors can be emitted in response to wl_surface requests. 1403 </description> 1404 <entry name="invalid_scale" value="0" summary="buffer scale value is invalid"/> 1405 <entry name="invalid_transform" value="1" summary="buffer transform value is invalid"/> 1406 <entry name="invalid_size" value="2" summary="buffer size is invalid"/> 1407 <entry name="invalid_offset" value="3" summary="buffer offset is invalid"/> 1408 </enum> 1409 1410 <request name="destroy" type="destructor"> 1411 <description summary="delete surface"> 1412 Deletes the surface and invalidates its object ID. 1413 </description> 1414 </request> 1415 1416 <request name="attach"> 1417 <description summary="set the surface contents"> 1418 Set a buffer as the content of this surface. 1419 1420 The new size of the surface is calculated based on the buffer 1421 size transformed by the inverse buffer_transform and the 1422 inverse buffer_scale. This means that at commit time the supplied 1423 buffer size must be an integer multiple of the buffer_scale. If 1424 that's not the case, an invalid_size error is sent. 1425 1426 The x and y arguments specify the location of the new pending 1427 buffer's upper left corner, relative to the current buffer's upper 1428 left corner, in surface-local coordinates. In other words, the 1429 x and y, combined with the new surface size define in which 1430 directions the surface's size changes. Setting anything other than 0 1431 as x and y arguments is discouraged, and should instead be replaced 1432 with using the separate wl_surface.offset request. 1433 1434 When the bound wl_surface version is 5 or higher, passing any 1435 non-zero x or y is a protocol violation, and will result in an 1436 'invalid_offset' error being raised. To achieve equivalent semantics, 1437 use wl_surface.offset. 1438 1439 Surface contents are double-buffered state, see wl_surface.commit. 1440 1441 The initial surface contents are void; there is no content. 1442 wl_surface.attach assigns the given wl_buffer as the pending 1443 wl_buffer. wl_surface.commit makes the pending wl_buffer the new 1444 surface contents, and the size of the surface becomes the size 1445 calculated from the wl_buffer, as described above. After commit, 1446 there is no pending buffer until the next attach. 1447 1448 Committing a pending wl_buffer allows the compositor to read the 1449 pixels in the wl_buffer. The compositor may access the pixels at 1450 any time after the wl_surface.commit request. When the compositor 1451 will not access the pixels anymore, it will send the 1452 wl_buffer.release event. Only after receiving wl_buffer.release, 1453 the client may reuse the wl_buffer. A wl_buffer that has been 1454 attached and then replaced by another attach instead of committed 1455 will not receive a release event, and is not used by the 1456 compositor. 1457 1458 If a pending wl_buffer has been committed to more than one wl_surface, 1459 the delivery of wl_buffer.release events becomes undefined. A well 1460 behaved client should not rely on wl_buffer.release events in this 1461 case. Alternatively, a client could create multiple wl_buffer objects 1462 from the same backing storage or use wp_linux_buffer_release. 1463 1464 Destroying the wl_buffer after wl_buffer.release does not change 1465 the surface contents. Destroying the wl_buffer before wl_buffer.release 1466 is allowed as long as the underlying buffer storage isn't re-used (this 1467 can happen e.g. on client process termination). However, if the client 1468 destroys the wl_buffer before receiving the wl_buffer.release event and 1469 mutates the underlying buffer storage, the surface contents become 1470 undefined immediately. 1471 1472 If wl_surface.attach is sent with a NULL wl_buffer, the 1473 following wl_surface.commit will remove the surface content. 1474 </description> 1475 <arg name="buffer" type="object" interface="wl_buffer" allow-null="true" 1476 summary="buffer of surface contents"/> 1477 <arg name="x" type="int" summary="surface-local x coordinate"/> 1478 <arg name="y" type="int" summary="surface-local y coordinate"/> 1479 </request> 1480 1481 <request name="damage"> 1482 <description summary="mark part of the surface damaged"> 1483 This request is used to describe the regions where the pending 1484 buffer is different from the current surface contents, and where 1485 the surface therefore needs to be repainted. The compositor 1486 ignores the parts of the damage that fall outside of the surface. 1487 1488 Damage is double-buffered state, see wl_surface.commit. 1489 1490 The damage rectangle is specified in surface-local coordinates, 1491 where x and y specify the upper left corner of the damage rectangle. 1492 1493 The initial value for pending damage is empty: no damage. 1494 wl_surface.damage adds pending damage: the new pending damage 1495 is the union of old pending damage and the given rectangle. 1496 1497 wl_surface.commit assigns pending damage as the current damage, 1498 and clears pending damage. The server will clear the current 1499 damage as it repaints the surface. 1500 1501 Note! New clients should not use this request. Instead damage can be 1502 posted with wl_surface.damage_buffer which uses buffer coordinates 1503 instead of surface coordinates. 1504 </description> 1505 <arg name="x" type="int" summary="surface-local x coordinate"/> 1506 <arg name="y" type="int" summary="surface-local y coordinate"/> 1507 <arg name="width" type="int" summary="width of damage rectangle"/> 1508 <arg name="height" type="int" summary="height of damage rectangle"/> 1509 </request> 1510 1511 <request name="frame"> 1512 <description summary="request a frame throttling hint"> 1513 Request a notification when it is a good time to start drawing a new 1514 frame, by creating a frame callback. This is useful for throttling 1515 redrawing operations, and driving animations. 1516 1517 When a client is animating on a wl_surface, it can use the 'frame' 1518 request to get notified when it is a good time to draw and commit the 1519 next frame of animation. If the client commits an update earlier than 1520 that, it is likely that some updates will not make it to the display, 1521 and the client is wasting resources by drawing too often. 1522 1523 The frame request will take effect on the next wl_surface.commit. 1524 The notification will only be posted for one frame unless 1525 requested again. For a wl_surface, the notifications are posted in 1526 the order the frame requests were committed. 1527 1528 The server must send the notifications so that a client 1529 will not send excessive updates, while still allowing 1530 the highest possible update rate for clients that wait for the reply 1531 before drawing again. The server should give some time for the client 1532 to draw and commit after sending the frame callback events to let it 1533 hit the next output refresh. 1534 1535 A server should avoid signaling the frame callbacks if the 1536 surface is not visible in any way, e.g. the surface is off-screen, 1537 or completely obscured by other opaque surfaces. 1538 1539 The object returned by this request will be destroyed by the 1540 compositor after the callback is fired and as such the client must not 1541 attempt to use it after that point. 1542 1543 The callback_data passed in the callback is the current time, in 1544 milliseconds, with an undefined base. 1545 </description> 1546 <arg name="callback" type="new_id" interface="wl_callback" summary="callback object for the frame request"/> 1547 </request> 1548 1549 <request name="set_opaque_region"> 1550 <description summary="set opaque region"> 1551 This request sets the region of the surface that contains 1552 opaque content. 1553 1554 The opaque region is an optimization hint for the compositor 1555 that lets it optimize the redrawing of content behind opaque 1556 regions. Setting an opaque region is not required for correct 1557 behaviour, but marking transparent content as opaque will result 1558 in repaint artifacts. 1559 1560 The opaque region is specified in surface-local coordinates. 1561 1562 The compositor ignores the parts of the opaque region that fall 1563 outside of the surface. 1564 1565 Opaque region is double-buffered state, see wl_surface.commit. 1566 1567 wl_surface.set_opaque_region changes the pending opaque region. 1568 wl_surface.commit copies the pending region to the current region. 1569 Otherwise, the pending and current regions are never changed. 1570 1571 The initial value for an opaque region is empty. Setting the pending 1572 opaque region has copy semantics, and the wl_region object can be 1573 destroyed immediately. A NULL wl_region causes the pending opaque 1574 region to be set to empty. 1575 </description> 1576 <arg name="region" type="object" interface="wl_region" allow-null="true" 1577 summary="opaque region of the surface"/> 1578 </request> 1579 1580 <request name="set_input_region"> 1581 <description summary="set input region"> 1582 This request sets the region of the surface that can receive 1583 pointer and touch events. 1584 1585 Input events happening outside of this region will try the next 1586 surface in the server surface stack. The compositor ignores the 1587 parts of the input region that fall outside of the surface. 1588 1589 The input region is specified in surface-local coordinates. 1590 1591 Input region is double-buffered state, see wl_surface.commit. 1592 1593 wl_surface.set_input_region changes the pending input region. 1594 wl_surface.commit copies the pending region to the current region. 1595 Otherwise the pending and current regions are never changed, 1596 except cursor and icon surfaces are special cases, see 1597 wl_pointer.set_cursor and wl_data_device.start_drag. 1598 1599 The initial value for an input region is infinite. That means the 1600 whole surface will accept input. Setting the pending input region 1601 has copy semantics, and the wl_region object can be destroyed 1602 immediately. A NULL wl_region causes the input region to be set 1603 to infinite. 1604 </description> 1605 <arg name="region" type="object" interface="wl_region" allow-null="true" 1606 summary="input region of the surface"/> 1607 </request> 1608 1609 <request name="commit"> 1610 <description summary="commit pending surface state"> 1611 Surface state (input, opaque, and damage regions, attached buffers, 1612 etc.) is double-buffered. Protocol requests modify the pending state, 1613 as opposed to the current state in use by the compositor. A commit 1614 request atomically applies all pending state, replacing the current 1615 state. After commit, the new pending state is as documented for each 1616 related request. 1617 1618 On commit, a pending wl_buffer is applied first, and all other state 1619 second. This means that all coordinates in double-buffered state are 1620 relative to the new wl_buffer coming into use, except for 1621 wl_surface.attach itself. If there is no pending wl_buffer, the 1622 coordinates are relative to the current surface contents. 1623 1624 All requests that need a commit to become effective are documented 1625 to affect double-buffered state. 1626 1627 Other interfaces may add further double-buffered surface state. 1628 </description> 1629 </request> 1630 1631 <event name="enter"> 1632 <description summary="surface enters an output"> 1633 This is emitted whenever a surface's creation, movement, or resizing 1634 results in some part of it being within the scanout region of an 1635 output. 1636 1637 Note that a surface may be overlapping with zero or more outputs. 1638 </description> 1639 <arg name="output" type="object" interface="wl_output" summary="output entered by the surface"/> 1640 </event> 1641 1642 <event name="leave"> 1643 <description summary="surface leaves an output"> 1644 This is emitted whenever a surface's creation, movement, or resizing 1645 results in it no longer having any part of it within the scanout region 1646 of an output. 1647 1648 Clients should not use the number of outputs the surface is on for frame 1649 throttling purposes. The surface might be hidden even if no leave event 1650 has been sent, and the compositor might expect new surface content 1651 updates even if no enter event has been sent. The frame event should be 1652 used instead. 1653 </description> 1654 <arg name="output" type="object" interface="wl_output" summary="output left by the surface"/> 1655 </event> 1656 1657 <!-- Version 2 additions --> 1658 1659 <request name="set_buffer_transform" since="2"> 1660 <description summary="sets the buffer transformation"> 1661 This request sets an optional transformation on how the compositor 1662 interprets the contents of the buffer attached to the surface. The 1663 accepted values for the transform parameter are the values for 1664 wl_output.transform. 1665 1666 Buffer transform is double-buffered state, see wl_surface.commit. 1667 1668 A newly created surface has its buffer transformation set to normal. 1669 1670 wl_surface.set_buffer_transform changes the pending buffer 1671 transformation. wl_surface.commit copies the pending buffer 1672 transformation to the current one. Otherwise, the pending and current 1673 values are never changed. 1674 1675 The purpose of this request is to allow clients to render content 1676 according to the output transform, thus permitting the compositor to 1677 use certain optimizations even if the display is rotated. Using 1678 hardware overlays and scanning out a client buffer for fullscreen 1679 surfaces are examples of such optimizations. Those optimizations are 1680 highly dependent on the compositor implementation, so the use of this 1681 request should be considered on a case-by-case basis. 1682 1683 Note that if the transform value includes 90 or 270 degree rotation, 1684 the width of the buffer will become the surface height and the height 1685 of the buffer will become the surface width. 1686 1687 If transform is not one of the values from the 1688 wl_output.transform enum the invalid_transform protocol error 1689 is raised. 1690 </description> 1691 <arg name="transform" type="int" enum="wl_output.transform" 1692 summary="transform for interpreting buffer contents"/> 1693 </request> 1694 1695 <!-- Version 3 additions --> 1696 1697 <request name="set_buffer_scale" since="3"> 1698 <description summary="sets the buffer scaling factor"> 1699 This request sets an optional scaling factor on how the compositor 1700 interprets the contents of the buffer attached to the window. 1701 1702 Buffer scale is double-buffered state, see wl_surface.commit. 1703 1704 A newly created surface has its buffer scale set to 1. 1705 1706 wl_surface.set_buffer_scale changes the pending buffer scale. 1707 wl_surface.commit copies the pending buffer scale to the current one. 1708 Otherwise, the pending and current values are never changed. 1709 1710 The purpose of this request is to allow clients to supply higher 1711 resolution buffer data for use on high resolution outputs. It is 1712 intended that you pick the same buffer scale as the scale of the 1713 output that the surface is displayed on. This means the compositor 1714 can avoid scaling when rendering the surface on that output. 1715 1716 Note that if the scale is larger than 1, then you have to attach 1717 a buffer that is larger (by a factor of scale in each dimension) 1718 than the desired surface size. 1719 1720 If scale is not positive the invalid_scale protocol error is 1721 raised. 1722 </description> 1723 <arg name="scale" type="int" 1724 summary="positive scale for interpreting buffer contents"/> 1725 </request> 1726 1727 <!-- Version 4 additions --> 1728 <request name="damage_buffer" since="4"> 1729 <description summary="mark part of the surface damaged using buffer coordinates"> 1730 This request is used to describe the regions where the pending 1731 buffer is different from the current surface contents, and where 1732 the surface therefore needs to be repainted. The compositor 1733 ignores the parts of the damage that fall outside of the surface. 1734 1735 Damage is double-buffered state, see wl_surface.commit. 1736 1737 The damage rectangle is specified in buffer coordinates, 1738 where x and y specify the upper left corner of the damage rectangle. 1739 1740 The initial value for pending damage is empty: no damage. 1741 wl_surface.damage_buffer adds pending damage: the new pending 1742 damage is the union of old pending damage and the given rectangle. 1743 1744 wl_surface.commit assigns pending damage as the current damage, 1745 and clears pending damage. The server will clear the current 1746 damage as it repaints the surface. 1747 1748 This request differs from wl_surface.damage in only one way - it 1749 takes damage in buffer coordinates instead of surface-local 1750 coordinates. While this generally is more intuitive than surface 1751 coordinates, it is especially desirable when using wp_viewport 1752 or when a drawing library (like EGL) is unaware of buffer scale 1753 and buffer transform. 1754 1755 Note: Because buffer transformation changes and damage requests may 1756 be interleaved in the protocol stream, it is impossible to determine 1757 the actual mapping between surface and buffer damage until 1758 wl_surface.commit time. Therefore, compositors wishing to take both 1759 kinds of damage into account will have to accumulate damage from the 1760 two requests separately and only transform from one to the other 1761 after receiving the wl_surface.commit. 1762 </description> 1763 <arg name="x" type="int" summary="buffer-local x coordinate"/> 1764 <arg name="y" type="int" summary="buffer-local y coordinate"/> 1765 <arg name="width" type="int" summary="width of damage rectangle"/> 1766 <arg name="height" type="int" summary="height of damage rectangle"/> 1767 </request> 1768 1769 <!-- Version 5 additions --> 1770 1771 <request name="offset" since="5"> 1772 <description summary="set the surface contents offset"> 1773 The x and y arguments specify the location of the new pending 1774 buffer's upper left corner, relative to the current buffer's upper 1775 left corner, in surface-local coordinates. In other words, the 1776 x and y, combined with the new surface size define in which 1777 directions the surface's size changes. 1778 1779 Surface location offset is double-buffered state, see 1780 wl_surface.commit. 1781 1782 This request is semantically equivalent to and the replaces the x and y 1783 arguments in the wl_surface.attach request in wl_surface versions prior 1784 to 5. See wl_surface.attach for details. 1785 </description> 1786 <arg name="x" type="int" summary="surface-local x coordinate"/> 1787 <arg name="y" type="int" summary="surface-local y coordinate"/> 1788 </request> 1789 </interface> 1790 1791 <interface name="wl_seat" version="8"> 1792 <description summary="group of input devices"> 1793 A seat is a group of keyboards, pointer and touch devices. This 1794 object is published as a global during start up, or when such a 1795 device is hot plugged. A seat typically has a pointer and 1796 maintains a keyboard focus and a pointer focus. 1797 </description> 1798 1799 <enum name="capability" bitfield="true"> 1800 <description summary="seat capability bitmask"> 1801 This is a bitmask of capabilities this seat has; if a member is 1802 set, then it is present on the seat. 1803 </description> 1804 <entry name="pointer" value="1" summary="the seat has pointer devices"/> 1805 <entry name="keyboard" value="2" summary="the seat has one or more keyboards"/> 1806 <entry name="touch" value="4" summary="the seat has touch devices"/> 1807 </enum> 1808 1809 <enum name="error"> 1810 <description summary="wl_seat error values"> 1811 These errors can be emitted in response to wl_seat requests. 1812 </description> 1813 <entry name="missing_capability" value="0" 1814 summary="get_pointer, get_keyboard or get_touch called on seat without the matching capability"/> 1815 </enum> 1816 1817 <event name="capabilities"> 1818 <description summary="seat capabilities changed"> 1819 This is emitted whenever a seat gains or loses the pointer, 1820 keyboard or touch capabilities. The argument is a capability 1821 enum containing the complete set of capabilities this seat has. 1822 1823 When the pointer capability is added, a client may create a 1824 wl_pointer object using the wl_seat.get_pointer request. This object 1825 will receive pointer events until the capability is removed in the 1826 future. 1827 1828 When the pointer capability is removed, a client should destroy the 1829 wl_pointer objects associated with the seat where the capability was 1830 removed, using the wl_pointer.release request. No further pointer 1831 events will be received on these objects. 1832 1833 In some compositors, if a seat regains the pointer capability and a 1834 client has a previously obtained wl_pointer object of version 4 or 1835 less, that object may start sending pointer events again. This 1836 behavior is considered a misinterpretation of the intended behavior 1837 and must not be relied upon by the client. wl_pointer objects of 1838 version 5 or later must not send events if created before the most 1839 recent event notifying the client of an added pointer capability. 1840 1841 The above behavior also applies to wl_keyboard and wl_touch with the 1842 keyboard and touch capabilities, respectively. 1843 </description> 1844 <arg name="capabilities" type="uint" enum="capability" summary="capabilities of the seat"/> 1845 </event> 1846 1847 <request name="get_pointer"> 1848 <description summary="return pointer object"> 1849 The ID provided will be initialized to the wl_pointer interface 1850 for this seat. 1851 1852 This request only takes effect if the seat has the pointer 1853 capability, or has had the pointer capability in the past. 1854 It is a protocol violation to issue this request on a seat that has 1855 never had the pointer capability. The missing_capability error will 1856 be sent in this case. 1857 </description> 1858 <arg name="id" type="new_id" interface="wl_pointer" summary="seat pointer"/> 1859 </request> 1860 1861 <request name="get_keyboard"> 1862 <description summary="return keyboard object"> 1863 The ID provided will be initialized to the wl_keyboard interface 1864 for this seat. 1865 1866 This request only takes effect if the seat has the keyboard 1867 capability, or has had the keyboard capability in the past. 1868 It is a protocol violation to issue this request on a seat that has 1869 never had the keyboard capability. The missing_capability error will 1870 be sent in this case. 1871 </description> 1872 <arg name="id" type="new_id" interface="wl_keyboard" summary="seat keyboard"/> 1873 </request> 1874 1875 <request name="get_touch"> 1876 <description summary="return touch object"> 1877 The ID provided will be initialized to the wl_touch interface 1878 for this seat. 1879 1880 This request only takes effect if the seat has the touch 1881 capability, or has had the touch capability in the past. 1882 It is a protocol violation to issue this request on a seat that has 1883 never had the touch capability. The missing_capability error will 1884 be sent in this case. 1885 </description> 1886 <arg name="id" type="new_id" interface="wl_touch" summary="seat touch interface"/> 1887 </request> 1888 1889 <!-- Version 2 additions --> 1890 1891 <event name="name" since="2"> 1892 <description summary="unique identifier for this seat"> 1893 In a multi-seat configuration the seat name can be used by clients to 1894 help identify which physical devices the seat represents. 1895 1896 The seat name is a UTF-8 string with no convention defined for its 1897 contents. Each name is unique among all wl_seat globals. The name is 1898 only guaranteed to be unique for the current compositor instance. 1899 1900 The same seat names are used for all clients. Thus, the name can be 1901 shared across processes to refer to a specific wl_seat global. 1902 1903 The name event is sent after binding to the seat global. This event is 1904 only sent once per seat object, and the name does not change over the 1905 lifetime of the wl_seat global. 1906 1907 Compositors may re-use the same seat name if the wl_seat global is 1908 destroyed and re-created later. 1909 </description> 1910 <arg name="name" type="string" summary="seat identifier"/> 1911 </event> 1912 1913 <!-- Version 5 additions --> 1914 1915 <request name="release" type="destructor" since="5"> 1916 <description summary="release the seat object"> 1917 Using this request a client can tell the server that it is not going to 1918 use the seat object anymore. 1919 </description> 1920 </request> 1921 1922 </interface> 1923 1924 <interface name="wl_pointer" version="8"> 1925 <description summary="pointer input device"> 1926 The wl_pointer interface represents one or more input devices, 1927 such as mice, which control the pointer location and pointer_focus 1928 of a seat. 1929 1930 The wl_pointer interface generates motion, enter and leave 1931 events for the surfaces that the pointer is located over, 1932 and button and axis events for button presses, button releases 1933 and scrolling. 1934 </description> 1935 1936 <enum name="error"> 1937 <entry name="role" value="0" summary="given wl_surface has another role"/> 1938 </enum> 1939 1940 <request name="set_cursor"> 1941 <description summary="set the pointer surface"> 1942 Set the pointer surface, i.e., the surface that contains the 1943 pointer image (cursor). This request gives the surface the role 1944 of a cursor. If the surface already has another role, it raises 1945 a protocol error. 1946 1947 The cursor actually changes only if the pointer 1948 focus for this device is one of the requesting client's surfaces 1949 or the surface parameter is the current pointer surface. If 1950 there was a previous surface set with this request it is 1951 replaced. If surface is NULL, the pointer image is hidden. 1952 1953 The parameters hotspot_x and hotspot_y define the position of 1954 the pointer surface relative to the pointer location. Its 1955 top-left corner is always at (x, y) - (hotspot_x, hotspot_y), 1956 where (x, y) are the coordinates of the pointer location, in 1957 surface-local coordinates. 1958 1959 On surface.attach requests to the pointer surface, hotspot_x 1960 and hotspot_y are decremented by the x and y parameters 1961 passed to the request. Attach must be confirmed by 1962 wl_surface.commit as usual. 1963 1964 The hotspot can also be updated by passing the currently set 1965 pointer surface to this request with new values for hotspot_x 1966 and hotspot_y. 1967 1968 The current and pending input regions of the wl_surface are 1969 cleared, and wl_surface.set_input_region is ignored until the 1970 wl_surface is no longer used as the cursor. When the use as a 1971 cursor ends, the current and pending input regions become 1972 undefined, and the wl_surface is unmapped. 1973 1974 The serial parameter must match the latest wl_pointer.enter 1975 serial number sent to the client. Otherwise the request will be 1976 ignored. 1977 </description> 1978 <arg name="serial" type="uint" summary="serial number of the enter event"/> 1979 <arg name="surface" type="object" interface="wl_surface" allow-null="true" 1980 summary="pointer surface"/> 1981 <arg name="hotspot_x" type="int" summary="surface-local x coordinate"/> 1982 <arg name="hotspot_y" type="int" summary="surface-local y coordinate"/> 1983 </request> 1984 1985 <event name="enter"> 1986 <description summary="enter event"> 1987 Notification that this seat's pointer is focused on a certain 1988 surface. 1989 1990 When a seat's focus enters a surface, the pointer image 1991 is undefined and a client should respond to this event by setting 1992 an appropriate pointer image with the set_cursor request. 1993 </description> 1994 <arg name="serial" type="uint" summary="serial number of the enter event"/> 1995 <arg name="surface" type="object" interface="wl_surface" summary="surface entered by the pointer"/> 1996 <arg name="surface_x" type="fixed" summary="surface-local x coordinate"/> 1997 <arg name="surface_y" type="fixed" summary="surface-local y coordinate"/> 1998 </event> 1999 2000 <event name="leave"> 2001 <description summary="leave event"> 2002 Notification that this seat's pointer is no longer focused on 2003 a certain surface. 2004 2005 The leave notification is sent before the enter notification 2006 for the new focus. 2007 </description> 2008 <arg name="serial" type="uint" summary="serial number of the leave event"/> 2009 <arg name="surface" type="object" interface="wl_surface" summary="surface left by the pointer"/> 2010 </event> 2011 2012 <event name="motion"> 2013 <description summary="pointer motion event"> 2014 Notification of pointer location change. The arguments 2015 surface_x and surface_y are the location relative to the 2016 focused surface. 2017 </description> 2018 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2019 <arg name="surface_x" type="fixed" summary="surface-local x coordinate"/> 2020 <arg name="surface_y" type="fixed" summary="surface-local y coordinate"/> 2021 </event> 2022 2023 <enum name="button_state"> 2024 <description summary="physical button state"> 2025 Describes the physical state of a button that produced the button 2026 event. 2027 </description> 2028 <entry name="released" value="0" summary="the button is not pressed"/> 2029 <entry name="pressed" value="1" summary="the button is pressed"/> 2030 </enum> 2031 2032 <event name="button"> 2033 <description summary="pointer button event"> 2034 Mouse button click and release notifications. 2035 2036 The location of the click is given by the last motion or 2037 enter event. 2038 The time argument is a timestamp with millisecond 2039 granularity, with an undefined base. 2040 2041 The button is a button code as defined in the Linux kernel's 2042 linux/input-event-codes.h header file, e.g. BTN_LEFT. 2043 2044 Any 16-bit button code value is reserved for future additions to the 2045 kernel's event code list. All other button codes above 0xFFFF are 2046 currently undefined but may be used in future versions of this 2047 protocol. 2048 </description> 2049 <arg name="serial" type="uint" summary="serial number of the button event"/> 2050 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2051 <arg name="button" type="uint" summary="button that produced the event"/> 2052 <arg name="state" type="uint" enum="button_state" summary="physical state of the button"/> 2053 </event> 2054 2055 <enum name="axis"> 2056 <description summary="axis types"> 2057 Describes the axis types of scroll events. 2058 </description> 2059 <entry name="vertical_scroll" value="0" summary="vertical axis"/> 2060 <entry name="horizontal_scroll" value="1" summary="horizontal axis"/> 2061 </enum> 2062 2063 <event name="axis"> 2064 <description summary="axis event"> 2065 Scroll and other axis notifications. 2066 2067 For scroll events (vertical and horizontal scroll axes), the 2068 value parameter is the length of a vector along the specified 2069 axis in a coordinate space identical to those of motion events, 2070 representing a relative movement along the specified axis. 2071 2072 For devices that support movements non-parallel to axes multiple 2073 axis events will be emitted. 2074 2075 When applicable, for example for touch pads, the server can 2076 choose to emit scroll events where the motion vector is 2077 equivalent to a motion event vector. 2078 2079 When applicable, a client can transform its content relative to the 2080 scroll distance. 2081 </description> 2082 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2083 <arg name="axis" type="uint" enum="axis" summary="axis type"/> 2084 <arg name="value" type="fixed" summary="length of vector in surface-local coordinate space"/> 2085 </event> 2086 2087 <!-- Version 3 additions --> 2088 2089 <request name="release" type="destructor" since="3"> 2090 <description summary="release the pointer object"> 2091 Using this request a client can tell the server that it is not going to 2092 use the pointer object anymore. 2093 2094 This request destroys the pointer proxy object, so clients must not call 2095 wl_pointer_destroy() after using this request. 2096 </description> 2097 </request> 2098 2099 <!-- Version 5 additions --> 2100 2101 <event name="frame" since="5"> 2102 <description summary="end of a pointer event sequence"> 2103 Indicates the end of a set of events that logically belong together. 2104 A client is expected to accumulate the data in all events within the 2105 frame before proceeding. 2106 2107 All wl_pointer events before a wl_pointer.frame event belong 2108 logically together. For example, in a diagonal scroll motion the 2109 compositor will send an optional wl_pointer.axis_source event, two 2110 wl_pointer.axis events (horizontal and vertical) and finally a 2111 wl_pointer.frame event. The client may use this information to 2112 calculate a diagonal vector for scrolling. 2113 2114 When multiple wl_pointer.axis events occur within the same frame, 2115 the motion vector is the combined motion of all events. 2116 When a wl_pointer.axis and a wl_pointer.axis_stop event occur within 2117 the same frame, this indicates that axis movement in one axis has 2118 stopped but continues in the other axis. 2119 When multiple wl_pointer.axis_stop events occur within the same 2120 frame, this indicates that these axes stopped in the same instance. 2121 2122 A wl_pointer.frame event is sent for every logical event group, 2123 even if the group only contains a single wl_pointer event. 2124 Specifically, a client may get a sequence: motion, frame, button, 2125 frame, axis, frame, axis_stop, frame. 2126 2127 The wl_pointer.enter and wl_pointer.leave events are logical events 2128 generated by the compositor and not the hardware. These events are 2129 also grouped by a wl_pointer.frame. When a pointer moves from one 2130 surface to another, a compositor should group the 2131 wl_pointer.leave event within the same wl_pointer.frame. 2132 However, a client must not rely on wl_pointer.leave and 2133 wl_pointer.enter being in the same wl_pointer.frame. 2134 Compositor-specific policies may require the wl_pointer.leave and 2135 wl_pointer.enter event being split across multiple wl_pointer.frame 2136 groups. 2137 </description> 2138 </event> 2139 2140 <enum name="axis_source"> 2141 <description summary="axis source types"> 2142 Describes the source types for axis events. This indicates to the 2143 client how an axis event was physically generated; a client may 2144 adjust the user interface accordingly. For example, scroll events 2145 from a "finger" source may be in a smooth coordinate space with 2146 kinetic scrolling whereas a "wheel" source may be in discrete steps 2147 of a number of lines. 2148 2149 The "continuous" axis source is a device generating events in a 2150 continuous coordinate space, but using something other than a 2151 finger. One example for this source is button-based scrolling where 2152 the vertical motion of a device is converted to scroll events while 2153 a button is held down. 2154 2155 The "wheel tilt" axis source indicates that the actual device is a 2156 wheel but the scroll event is not caused by a rotation but a 2157 (usually sideways) tilt of the wheel. 2158 </description> 2159 <entry name="wheel" value="0" summary="a physical wheel rotation" /> 2160 <entry name="finger" value="1" summary="finger on a touch surface" /> 2161 <entry name="continuous" value="2" summary="continuous coordinate space"/> 2162 <entry name="wheel_tilt" value="3" summary="a physical wheel tilt" since="6"/> 2163 </enum> 2164 2165 <event name="axis_source" since="5"> 2166 <description summary="axis source event"> 2167 Source information for scroll and other axes. 2168 2169 This event does not occur on its own. It is sent before a 2170 wl_pointer.frame event and carries the source information for 2171 all events within that frame. 2172 2173 The source specifies how this event was generated. If the source is 2174 wl_pointer.axis_source.finger, a wl_pointer.axis_stop event will be 2175 sent when the user lifts the finger off the device. 2176 2177 If the source is wl_pointer.axis_source.wheel, 2178 wl_pointer.axis_source.wheel_tilt or 2179 wl_pointer.axis_source.continuous, a wl_pointer.axis_stop event may 2180 or may not be sent. Whether a compositor sends an axis_stop event 2181 for these sources is hardware-specific and implementation-dependent; 2182 clients must not rely on receiving an axis_stop event for these 2183 scroll sources and should treat scroll sequences from these scroll 2184 sources as unterminated by default. 2185 2186 This event is optional. If the source is unknown for a particular 2187 axis event sequence, no event is sent. 2188 Only one wl_pointer.axis_source event is permitted per frame. 2189 2190 The order of wl_pointer.axis_discrete and wl_pointer.axis_source is 2191 not guaranteed. 2192 </description> 2193 <arg name="axis_source" type="uint" enum="axis_source" summary="source of the axis event"/> 2194 </event> 2195 2196 <event name="axis_stop" since="5"> 2197 <description summary="axis stop event"> 2198 Stop notification for scroll and other axes. 2199 2200 For some wl_pointer.axis_source types, a wl_pointer.axis_stop event 2201 is sent to notify a client that the axis sequence has terminated. 2202 This enables the client to implement kinetic scrolling. 2203 See the wl_pointer.axis_source documentation for information on when 2204 this event may be generated. 2205 2206 Any wl_pointer.axis events with the same axis_source after this 2207 event should be considered as the start of a new axis motion. 2208 2209 The timestamp is to be interpreted identical to the timestamp in the 2210 wl_pointer.axis event. The timestamp value may be the same as a 2211 preceding wl_pointer.axis event. 2212 </description> 2213 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2214 <arg name="axis" type="uint" enum="axis" summary="the axis stopped with this event"/> 2215 </event> 2216 2217 <event name="axis_discrete" since="5"> 2218 <description summary="axis click event"> 2219 Discrete step information for scroll and other axes. 2220 2221 This event carries the axis value of the wl_pointer.axis event in 2222 discrete steps (e.g. mouse wheel clicks). 2223 2224 This event is deprecated with wl_pointer version 8 - this event is not 2225 sent to clients supporting version 8 or later. 2226 2227 This event does not occur on its own, it is coupled with a 2228 wl_pointer.axis event that represents this axis value on a 2229 continuous scale. The protocol guarantees that each axis_discrete 2230 event is always followed by exactly one axis event with the same 2231 axis number within the same wl_pointer.frame. Note that the protocol 2232 allows for other events to occur between the axis_discrete and 2233 its coupled axis event, including other axis_discrete or axis 2234 events. A wl_pointer.frame must not contain more than one axis_discrete 2235 event per axis type. 2236 2237 This event is optional; continuous scrolling devices 2238 like two-finger scrolling on touchpads do not have discrete 2239 steps and do not generate this event. 2240 2241 The discrete value carries the directional information. e.g. a value 2242 of -2 is two steps towards the negative direction of this axis. 2243 2244 The axis number is identical to the axis number in the associated 2245 axis event. 2246 2247 The order of wl_pointer.axis_discrete and wl_pointer.axis_source is 2248 not guaranteed. 2249 </description> 2250 <arg name="axis" type="uint" enum="axis" summary="axis type"/> 2251 <arg name="discrete" type="int" summary="number of steps"/> 2252 </event> 2253 2254 <event name="axis_value120" since="8"> 2255 <description summary="axis high-resolution scroll event"> 2256 Discrete high-resolution scroll information. 2257 2258 This event carries high-resolution wheel scroll information, 2259 with each multiple of 120 representing one logical scroll step 2260 (a wheel detent). For example, an axis_value120 of 30 is one quarter of 2261 a logical scroll step in the positive direction, a value120 of 2262 -240 are two logical scroll steps in the negative direction within the 2263 same hardware event. 2264 Clients that rely on discrete scrolling should accumulate the 2265 value120 to multiples of 120 before processing the event. 2266 2267 The value120 must not be zero. 2268 2269 This event replaces the wl_pointer.axis_discrete event in clients 2270 supporting wl_pointer version 8 or later. 2271 2272 Where a wl_pointer.axis_source event occurs in the same 2273 wl_pointer.frame, the axis source applies to this event. 2274 2275 The order of wl_pointer.axis_value120 and wl_pointer.axis_source is 2276 not guaranteed. 2277 </description> 2278 <arg name="axis" type="uint" enum="axis" summary="axis type"/> 2279 <arg name="value120" type="int" summary="scroll distance as fraction of 120"/> 2280 </event> 2281 </interface> 2282 2283 <interface name="wl_keyboard" version="8"> 2284 <description summary="keyboard input device"> 2285 The wl_keyboard interface represents one or more keyboards 2286 associated with a seat. 2287 </description> 2288 2289 <enum name="keymap_format"> 2290 <description summary="keyboard mapping format"> 2291 This specifies the format of the keymap provided to the 2292 client with the wl_keyboard.keymap event. 2293 </description> 2294 <entry name="no_keymap" value="0" 2295 summary="no keymap; client must understand how to interpret the raw keycode"/> 2296 <entry name="xkb_v1" value="1" 2297 summary="libxkbcommon compatible, null-terminated string; to determine the xkb keycode, clients must add 8 to the key event keycode"/> 2298 </enum> 2299 2300 <event name="keymap"> 2301 <description summary="keyboard mapping"> 2302 This event provides a file descriptor to the client which can be 2303 memory-mapped in read-only mode to provide a keyboard mapping 2304 description. 2305 2306 From version 7 onwards, the fd must be mapped with MAP_PRIVATE by 2307 the recipient, as MAP_SHARED may fail. 2308 </description> 2309 <arg name="format" type="uint" enum="keymap_format" summary="keymap format"/> 2310 <arg name="fd" type="fd" summary="keymap file descriptor"/> 2311 <arg name="size" type="uint" summary="keymap size, in bytes"/> 2312 </event> 2313 2314 <event name="enter"> 2315 <description summary="enter event"> 2316 Notification that this seat's keyboard focus is on a certain 2317 surface. 2318 2319 The compositor must send the wl_keyboard.modifiers event after this 2320 event. 2321 </description> 2322 <arg name="serial" type="uint" summary="serial number of the enter event"/> 2323 <arg name="surface" type="object" interface="wl_surface" summary="surface gaining keyboard focus"/> 2324 <arg name="keys" type="array" summary="the currently pressed keys"/> 2325 </event> 2326 2327 <event name="leave"> 2328 <description summary="leave event"> 2329 Notification that this seat's keyboard focus is no longer on 2330 a certain surface. 2331 2332 The leave notification is sent before the enter notification 2333 for the new focus. 2334 2335 After this event client must assume that all keys, including modifiers, 2336 are lifted and also it must stop key repeating if there's some going on. 2337 </description> 2338 <arg name="serial" type="uint" summary="serial number of the leave event"/> 2339 <arg name="surface" type="object" interface="wl_surface" summary="surface that lost keyboard focus"/> 2340 </event> 2341 2342 <enum name="key_state"> 2343 <description summary="physical key state"> 2344 Describes the physical state of a key that produced the key event. 2345 </description> 2346 <entry name="released" value="0" summary="key is not pressed"/> 2347 <entry name="pressed" value="1" summary="key is pressed"/> 2348 </enum> 2349 2350 <event name="key"> 2351 <description summary="key event"> 2352 A key was pressed or released. 2353 The time argument is a timestamp with millisecond 2354 granularity, with an undefined base. 2355 2356 The key is a platform-specific key code that can be interpreted 2357 by feeding it to the keyboard mapping (see the keymap event). 2358 2359 If this event produces a change in modifiers, then the resulting 2360 wl_keyboard.modifiers event must be sent after this event. 2361 </description> 2362 <arg name="serial" type="uint" summary="serial number of the key event"/> 2363 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2364 <arg name="key" type="uint" summary="key that produced the event"/> 2365 <arg name="state" type="uint" enum="key_state" summary="physical state of the key"/> 2366 </event> 2367 2368 <event name="modifiers"> 2369 <description summary="modifier and group state"> 2370 Notifies clients that the modifier and/or group state has 2371 changed, and it should update its local state. 2372 </description> 2373 <arg name="serial" type="uint" summary="serial number of the modifiers event"/> 2374 <arg name="mods_depressed" type="uint" summary="depressed modifiers"/> 2375 <arg name="mods_latched" type="uint" summary="latched modifiers"/> 2376 <arg name="mods_locked" type="uint" summary="locked modifiers"/> 2377 <arg name="group" type="uint" summary="keyboard layout"/> 2378 </event> 2379 2380 <!-- Version 3 additions --> 2381 2382 <request name="release" type="destructor" since="3"> 2383 <description summary="release the keyboard object"/> 2384 </request> 2385 2386 <!-- Version 4 additions --> 2387 2388 <event name="repeat_info" since="4"> 2389 <description summary="repeat rate and delay"> 2390 Informs the client about the keyboard's repeat rate and delay. 2391 2392 This event is sent as soon as the wl_keyboard object has been created, 2393 and is guaranteed to be received by the client before any key press 2394 event. 2395 2396 Negative values for either rate or delay are illegal. A rate of zero 2397 will disable any repeating (regardless of the value of delay). 2398 2399 This event can be sent later on as well with a new value if necessary, 2400 so clients should continue listening for the event past the creation 2401 of wl_keyboard. 2402 </description> 2403 <arg name="rate" type="int" 2404 summary="the rate of repeating keys in characters per second"/> 2405 <arg name="delay" type="int" 2406 summary="delay in milliseconds since key down until repeating starts"/> 2407 </event> 2408 </interface> 2409 2410 <interface name="wl_touch" version="8"> 2411 <description summary="touchscreen input device"> 2412 The wl_touch interface represents a touchscreen 2413 associated with a seat. 2414 2415 Touch interactions can consist of one or more contacts. 2416 For each contact, a series of events is generated, starting 2417 with a down event, followed by zero or more motion events, 2418 and ending with an up event. Events relating to the same 2419 contact point can be identified by the ID of the sequence. 2420 </description> 2421 2422 <event name="down"> 2423 <description summary="touch down event and beginning of a touch sequence"> 2424 A new touch point has appeared on the surface. This touch point is 2425 assigned a unique ID. Future events from this touch point reference 2426 this ID. The ID ceases to be valid after a touch up event and may be 2427 reused in the future. 2428 </description> 2429 <arg name="serial" type="uint" summary="serial number of the touch down event"/> 2430 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2431 <arg name="surface" type="object" interface="wl_surface" summary="surface touched"/> 2432 <arg name="id" type="int" summary="the unique ID of this touch point"/> 2433 <arg name="x" type="fixed" summary="surface-local x coordinate"/> 2434 <arg name="y" type="fixed" summary="surface-local y coordinate"/> 2435 </event> 2436 2437 <event name="up"> 2438 <description summary="end of a touch event sequence"> 2439 The touch point has disappeared. No further events will be sent for 2440 this touch point and the touch point's ID is released and may be 2441 reused in a future touch down event. 2442 </description> 2443 <arg name="serial" type="uint" summary="serial number of the touch up event"/> 2444 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2445 <arg name="id" type="int" summary="the unique ID of this touch point"/> 2446 </event> 2447 2448 <event name="motion"> 2449 <description summary="update of touch point coordinates"> 2450 A touch point has changed coordinates. 2451 </description> 2452 <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> 2453 <arg name="id" type="int" summary="the unique ID of this touch point"/> 2454 <arg name="x" type="fixed" summary="surface-local x coordinate"/> 2455 <arg name="y" type="fixed" summary="surface-local y coordinate"/> 2456 </event> 2457 2458 <event name="frame"> 2459 <description summary="end of touch frame event"> 2460 Indicates the end of a set of events that logically belong together. 2461 A client is expected to accumulate the data in all events within the 2462 frame before proceeding. 2463 2464 A wl_touch.frame terminates at least one event but otherwise no 2465 guarantee is provided about the set of events within a frame. A client 2466 must assume that any state not updated in a frame is unchanged from the 2467 previously known state. 2468 </description> 2469 </event> 2470 2471 <event name="cancel"> 2472 <description summary="touch session cancelled"> 2473 Sent if the compositor decides the touch stream is a global 2474 gesture. No further events are sent to the clients from that 2475 particular gesture. Touch cancellation applies to all touch points 2476 currently active on this client's surface. The client is 2477 responsible for finalizing the touch points, future touch points on 2478 this surface may reuse the touch point ID. 2479 </description> 2480 </event> 2481 2482 <!-- Version 3 additions --> 2483 2484 <request name="release" type="destructor" since="3"> 2485 <description summary="release the touch object"/> 2486 </request> 2487 2488 <!-- Version 6 additions --> 2489 2490 <event name="shape" since="6"> 2491 <description summary="update shape of touch point"> 2492 Sent when a touchpoint has changed its shape. 2493 2494 This event does not occur on its own. It is sent before a 2495 wl_touch.frame event and carries the new shape information for 2496 any previously reported, or new touch points of that frame. 2497 2498 Other events describing the touch point such as wl_touch.down, 2499 wl_touch.motion or wl_touch.orientation may be sent within the 2500 same wl_touch.frame. A client should treat these events as a single 2501 logical touch point update. The order of wl_touch.shape, 2502 wl_touch.orientation and wl_touch.motion is not guaranteed. 2503 A wl_touch.down event is guaranteed to occur before the first 2504 wl_touch.shape event for this touch ID but both events may occur within 2505 the same wl_touch.frame. 2506 2507 A touchpoint shape is approximated by an ellipse through the major and 2508 minor axis length. The major axis length describes the longer diameter 2509 of the ellipse, while the minor axis length describes the shorter 2510 diameter. Major and minor are orthogonal and both are specified in 2511 surface-local coordinates. The center of the ellipse is always at the 2512 touchpoint location as reported by wl_touch.down or wl_touch.move. 2513 2514 This event is only sent by the compositor if the touch device supports 2515 shape reports. The client has to make reasonable assumptions about the 2516 shape if it did not receive this event. 2517 </description> 2518 <arg name="id" type="int" summary="the unique ID of this touch point"/> 2519 <arg name="major" type="fixed" summary="length of the major axis in surface-local coordinates"/> 2520 <arg name="minor" type="fixed" summary="length of the minor axis in surface-local coordinates"/> 2521 </event> 2522 2523 <event name="orientation" since="6"> 2524 <description summary="update orientation of touch point"> 2525 Sent when a touchpoint has changed its orientation. 2526 2527 This event does not occur on its own. It is sent before a 2528 wl_touch.frame event and carries the new shape information for 2529 any previously reported, or new touch points of that frame. 2530 2531 Other events describing the touch point such as wl_touch.down, 2532 wl_touch.motion or wl_touch.shape may be sent within the 2533 same wl_touch.frame. A client should treat these events as a single 2534 logical touch point update. The order of wl_touch.shape, 2535 wl_touch.orientation and wl_touch.motion is not guaranteed. 2536 A wl_touch.down event is guaranteed to occur before the first 2537 wl_touch.orientation event for this touch ID but both events may occur 2538 within the same wl_touch.frame. 2539 2540 The orientation describes the clockwise angle of a touchpoint's major 2541 axis to the positive surface y-axis and is normalized to the -180 to 2542 +180 degree range. The granularity of orientation depends on the touch 2543 device, some devices only support binary rotation values between 0 and 2544 90 degrees. 2545 2546 This event is only sent by the compositor if the touch device supports 2547 orientation reports. 2548 </description> 2549 <arg name="id" type="int" summary="the unique ID of this touch point"/> 2550 <arg name="orientation" type="fixed" summary="angle between major axis and positive surface y-axis in degrees"/> 2551 </event> 2552 </interface> 2553 2554 <interface name="wl_output" version="4"> 2555 <description summary="compositor output region"> 2556 An output describes part of the compositor geometry. The 2557 compositor works in the 'compositor coordinate system' and an 2558 output corresponds to a rectangular area in that space that is 2559 actually visible. This typically corresponds to a monitor that 2560 displays part of the compositor space. This object is published 2561 as global during start up, or when a monitor is hotplugged. 2562 </description> 2563 2564 <enum name="subpixel"> 2565 <description summary="subpixel geometry information"> 2566 This enumeration describes how the physical 2567 pixels on an output are laid out. 2568 </description> 2569 <entry name="unknown" value="0" summary="unknown geometry"/> 2570 <entry name="none" value="1" summary="no geometry"/> 2571 <entry name="horizontal_rgb" value="2" summary="horizontal RGB"/> 2572 <entry name="horizontal_bgr" value="3" summary="horizontal BGR"/> 2573 <entry name="vertical_rgb" value="4" summary="vertical RGB"/> 2574 <entry name="vertical_bgr" value="5" summary="vertical BGR"/> 2575 </enum> 2576 2577 <enum name="transform"> 2578 <description summary="transform from framebuffer to output"> 2579 This describes the transform that a compositor will apply to a 2580 surface to compensate for the rotation or mirroring of an 2581 output device. 2582 2583 The flipped values correspond to an initial flip around a 2584 vertical axis followed by rotation. 2585 2586 The purpose is mainly to allow clients to render accordingly and 2587 tell the compositor, so that for fullscreen surfaces, the 2588 compositor will still be able to scan out directly from client 2589 surfaces. 2590 </description> 2591 <entry name="normal" value="0" summary="no transform"/> 2592 <entry name="90" value="1" summary="90 degrees counter-clockwise"/> 2593 <entry name="180" value="2" summary="180 degrees counter-clockwise"/> 2594 <entry name="270" value="3" summary="270 degrees counter-clockwise"/> 2595 <entry name="flipped" value="4" summary="180 degree flip around a vertical axis"/> 2596 <entry name="flipped_90" value="5" summary="flip and rotate 90 degrees counter-clockwise"/> 2597 <entry name="flipped_180" value="6" summary="flip and rotate 180 degrees counter-clockwise"/> 2598 <entry name="flipped_270" value="7" summary="flip and rotate 270 degrees counter-clockwise"/> 2599 </enum> 2600 2601 <event name="geometry"> 2602 <description summary="properties of the output"> 2603 The geometry event describes geometric properties of the output. 2604 The event is sent when binding to the output object and whenever 2605 any of the properties change. 2606 2607 The physical size can be set to zero if it doesn't make sense for this 2608 output (e.g. for projectors or virtual outputs). 2609 2610 The geometry event will be followed by a done event (starting from 2611 version 2). 2612 2613 Note: wl_output only advertises partial information about the output 2614 position and identification. Some compositors, for instance those not 2615 implementing a desktop-style output layout or those exposing virtual 2616 outputs, might fake this information. Instead of using x and y, clients 2617 should use xdg_output.logical_position. Instead of using make and model, 2618 clients should use name and description. 2619 </description> 2620 <arg name="x" type="int" 2621 summary="x position within the global compositor space"/> 2622 <arg name="y" type="int" 2623 summary="y position within the global compositor space"/> 2624 <arg name="physical_width" type="int" 2625 summary="width in millimeters of the output"/> 2626 <arg name="physical_height" type="int" 2627 summary="height in millimeters of the output"/> 2628 <arg name="subpixel" type="int" enum="subpixel" 2629 summary="subpixel orientation of the output"/> 2630 <arg name="make" type="string" 2631 summary="textual description of the manufacturer"/> 2632 <arg name="model" type="string" 2633 summary="textual description of the model"/> 2634 <arg name="transform" type="int" enum="transform" 2635 summary="transform that maps framebuffer to output"/> 2636 </event> 2637 2638 <enum name="mode" bitfield="true"> 2639 <description summary="mode information"> 2640 These flags describe properties of an output mode. 2641 They are used in the flags bitfield of the mode event. 2642 </description> 2643 <entry name="current" value="0x1" 2644 summary="indicates this is the current mode"/> 2645 <entry name="preferred" value="0x2" 2646 summary="indicates this is the preferred mode"/> 2647 </enum> 2648 2649 <event name="mode"> 2650 <description summary="advertise available modes for the output"> 2651 The mode event describes an available mode for the output. 2652 2653 The event is sent when binding to the output object and there 2654 will always be one mode, the current mode. The event is sent 2655 again if an output changes mode, for the mode that is now 2656 current. In other words, the current mode is always the last 2657 mode that was received with the current flag set. 2658 2659 Non-current modes are deprecated. A compositor can decide to only 2660 advertise the current mode and never send other modes. Clients 2661 should not rely on non-current modes. 2662 2663 The size of a mode is given in physical hardware units of 2664 the output device. This is not necessarily the same as 2665 the output size in the global compositor space. For instance, 2666 the output may be scaled, as described in wl_output.scale, 2667 or transformed, as described in wl_output.transform. Clients 2668 willing to retrieve the output size in the global compositor 2669 space should use xdg_output.logical_size instead. 2670 2671 The vertical refresh rate can be set to zero if it doesn't make 2672 sense for this output (e.g. for virtual outputs). 2673 2674 The mode event will be followed by a done event (starting from 2675 version 2). 2676 2677 Clients should not use the refresh rate to schedule frames. Instead, 2678 they should use the wl_surface.frame event or the presentation-time 2679 protocol. 2680 2681 Note: this information is not always meaningful for all outputs. Some 2682 compositors, such as those exposing virtual outputs, might fake the 2683 refresh rate or the size. 2684 </description> 2685 <arg name="flags" type="uint" enum="mode" summary="bitfield of mode flags"/> 2686 <arg name="width" type="int" summary="width of the mode in hardware units"/> 2687 <arg name="height" type="int" summary="height of the mode in hardware units"/> 2688 <arg name="refresh" type="int" summary="vertical refresh rate in mHz"/> 2689 </event> 2690 2691 <!-- Version 2 additions --> 2692 2693 <event name="done" since="2"> 2694 <description summary="sent all information about output"> 2695 This event is sent after all other properties have been 2696 sent after binding to the output object and after any 2697 other property changes done after that. This allows 2698 changes to the output properties to be seen as 2699 atomic, even if they happen via multiple events. 2700 </description> 2701 </event> 2702 2703 <event name="scale" since="2"> 2704 <description summary="output scaling properties"> 2705 This event contains scaling geometry information 2706 that is not in the geometry event. It may be sent after 2707 binding the output object or if the output scale changes 2708 later. If it is not sent, the client should assume a 2709 scale of 1. 2710 2711 A scale larger than 1 means that the compositor will 2712 automatically scale surface buffers by this amount 2713 when rendering. This is used for very high resolution 2714 displays where applications rendering at the native 2715 resolution would be too small to be legible. 2716 2717 It is intended that scaling aware clients track the 2718 current output of a surface, and if it is on a scaled 2719 output it should use wl_surface.set_buffer_scale with 2720 the scale of the output. That way the compositor can 2721 avoid scaling the surface, and the client can supply 2722 a higher detail image. 2723 2724 The scale event will be followed by a done event. 2725 </description> 2726 <arg name="factor" type="int" summary="scaling factor of output"/> 2727 </event> 2728 2729 <!-- Version 3 additions --> 2730 2731 <request name="release" type="destructor" since="3"> 2732 <description summary="release the output object"> 2733 Using this request a client can tell the server that it is not going to 2734 use the output object anymore. 2735 </description> 2736 </request> 2737 2738 <!-- Version 4 additions --> 2739 2740 <event name="name" since="4"> 2741 <description summary="name of this output"> 2742 Many compositors will assign user-friendly names to their outputs, show 2743 them to the user, allow the user to refer to an output, etc. The client 2744 may wish to know this name as well to offer the user similar behaviors. 2745 2746 The name is a UTF-8 string with no convention defined for its contents. 2747 Each name is unique among all wl_output globals. The name is only 2748 guaranteed to be unique for the compositor instance. 2749 2750 The same output name is used for all clients for a given wl_output 2751 global. Thus, the name can be shared across processes to refer to a 2752 specific wl_output global. 2753 2754 The name is not guaranteed to be persistent across sessions, thus cannot 2755 be used to reliably identify an output in e.g. configuration files. 2756 2757 Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do 2758 not assume that the name is a reflection of an underlying DRM connector, 2759 X11 connection, etc. 2760 2761 The name event is sent after binding the output object. This event is 2762 only sent once per output object, and the name does not change over the 2763 lifetime of the wl_output global. 2764 2765 Compositors may re-use the same output name if the wl_output global is 2766 destroyed and re-created later. Compositors should avoid re-using the 2767 same name if possible. 2768 2769 The name event will be followed by a done event. 2770 </description> 2771 <arg name="name" type="string" summary="output name"/> 2772 </event> 2773 2774 <event name="description" since="4"> 2775 <description summary="human-readable description of this output"> 2776 Many compositors can produce human-readable descriptions of their 2777 outputs. The client may wish to know this description as well, e.g. for 2778 output selection purposes. 2779 2780 The description is a UTF-8 string with no convention defined for its 2781 contents. The description is not guaranteed to be unique among all 2782 wl_output globals. Examples might include 'Foocorp 11" Display' or 2783 'Virtual X11 output via :1'. 2784 2785 The description event is sent after binding the output object and 2786 whenever the description changes. The description is optional, and may 2787 not be sent at all. 2788 2789 The description event will be followed by a done event. 2790 </description> 2791 <arg name="description" type="string" summary="output description"/> 2792 </event> 2793 </interface> 2794 2795 <interface name="wl_region" version="1"> 2796 <description summary="region interface"> 2797 A region object describes an area. 2798 2799 Region objects are used to describe the opaque and input 2800 regions of a surface. 2801 </description> 2802 2803 <request name="destroy" type="destructor"> 2804 <description summary="destroy region"> 2805 Destroy the region. This will invalidate the object ID. 2806 </description> 2807 </request> 2808 2809 <request name="add"> 2810 <description summary="add rectangle to region"> 2811 Add the specified rectangle to the region. 2812 </description> 2813 <arg name="x" type="int" summary="region-local x coordinate"/> 2814 <arg name="y" type="int" summary="region-local y coordinate"/> 2815 <arg name="width" type="int" summary="rectangle width"/> 2816 <arg name="height" type="int" summary="rectangle height"/> 2817 </request> 2818 2819 <request name="subtract"> 2820 <description summary="subtract rectangle from region"> 2821 Subtract the specified rectangle from the region. 2822 </description> 2823 <arg name="x" type="int" summary="region-local x coordinate"/> 2824 <arg name="y" type="int" summary="region-local y coordinate"/> 2825 <arg name="width" type="int" summary="rectangle width"/> 2826 <arg name="height" type="int" summary="rectangle height"/> 2827 </request> 2828 </interface> 2829 2830 <interface name="wl_subcompositor" version="1"> 2831 <description summary="sub-surface compositing"> 2832 The global interface exposing sub-surface compositing capabilities. 2833 A wl_surface, that has sub-surfaces associated, is called the 2834 parent surface. Sub-surfaces can be arbitrarily nested and create 2835 a tree of sub-surfaces. 2836 2837 The root surface in a tree of sub-surfaces is the main 2838 surface. The main surface cannot be a sub-surface, because 2839 sub-surfaces must always have a parent. 2840 2841 A main surface with its sub-surfaces forms a (compound) window. 2842 For window management purposes, this set of wl_surface objects is 2843 to be considered as a single window, and it should also behave as 2844 such. 2845 2846 The aim of sub-surfaces is to offload some of the compositing work 2847 within a window from clients to the compositor. A prime example is 2848 a video player with decorations and video in separate wl_surface 2849 objects. This should allow the compositor to pass YUV video buffer 2850 processing to dedicated overlay hardware when possible. 2851 </description> 2852 2853 <request name="destroy" type="destructor"> 2854 <description summary="unbind from the subcompositor interface"> 2855 Informs the server that the client will not be using this 2856 protocol object anymore. This does not affect any other 2857 objects, wl_subsurface objects included. 2858 </description> 2859 </request> 2860 2861 <enum name="error"> 2862 <entry name="bad_surface" value="0" 2863 summary="the to-be sub-surface is invalid"/> 2864 </enum> 2865 2866 <request name="get_subsurface"> 2867 <description summary="give a surface the role sub-surface"> 2868 Create a sub-surface interface for the given surface, and 2869 associate it with the given parent surface. This turns a 2870 plain wl_surface into a sub-surface. 2871 2872 The to-be sub-surface must not already have another role, and it 2873 must not have an existing wl_subsurface object. Otherwise a protocol 2874 error is raised. 2875 2876 Adding sub-surfaces to a parent is a double-buffered operation on the 2877 parent (see wl_surface.commit). The effect of adding a sub-surface 2878 becomes visible on the next time the state of the parent surface is 2879 applied. 2880 2881 This request modifies the behaviour of wl_surface.commit request on 2882 the sub-surface, see the documentation on wl_subsurface interface. 2883 </description> 2884 <arg name="id" type="new_id" interface="wl_subsurface" 2885 summary="the new sub-surface object ID"/> 2886 <arg name="surface" type="object" interface="wl_surface" 2887 summary="the surface to be turned into a sub-surface"/> 2888 <arg name="parent" type="object" interface="wl_surface" 2889 summary="the parent surface"/> 2890 </request> 2891 </interface> 2892 2893 <interface name="wl_subsurface" version="1"> 2894 <description summary="sub-surface interface to a wl_surface"> 2895 An additional interface to a wl_surface object, which has been 2896 made a sub-surface. A sub-surface has one parent surface. A 2897 sub-surface's size and position are not limited to that of the parent. 2898 Particularly, a sub-surface is not automatically clipped to its 2899 parent's area. 2900 2901 A sub-surface becomes mapped, when a non-NULL wl_buffer is applied 2902 and the parent surface is mapped. The order of which one happens 2903 first is irrelevant. A sub-surface is hidden if the parent becomes 2904 hidden, or if a NULL wl_buffer is applied. These rules apply 2905 recursively through the tree of surfaces. 2906 2907 The behaviour of a wl_surface.commit request on a sub-surface 2908 depends on the sub-surface's mode. The possible modes are 2909 synchronized and desynchronized, see methods 2910 wl_subsurface.set_sync and wl_subsurface.set_desync. Synchronized 2911 mode caches the wl_surface state to be applied when the parent's 2912 state gets applied, and desynchronized mode applies the pending 2913 wl_surface state directly. A sub-surface is initially in the 2914 synchronized mode. 2915 2916 Sub-surfaces also have another kind of state, which is managed by 2917 wl_subsurface requests, as opposed to wl_surface requests. This 2918 state includes the sub-surface position relative to the parent 2919 surface (wl_subsurface.set_position), and the stacking order of 2920 the parent and its sub-surfaces (wl_subsurface.place_above and 2921 .place_below). This state is applied when the parent surface's 2922 wl_surface state is applied, regardless of the sub-surface's mode. 2923 As the exception, set_sync and set_desync are effective immediately. 2924 2925 The main surface can be thought to be always in desynchronized mode, 2926 since it does not have a parent in the sub-surfaces sense. 2927 2928 Even if a sub-surface is in desynchronized mode, it will behave as 2929 in synchronized mode, if its parent surface behaves as in 2930 synchronized mode. This rule is applied recursively throughout the 2931 tree of surfaces. This means, that one can set a sub-surface into 2932 synchronized mode, and then assume that all its child and grand-child 2933 sub-surfaces are synchronized, too, without explicitly setting them. 2934 2935 If the wl_surface associated with the wl_subsurface is destroyed, the 2936 wl_subsurface object becomes inert. Note, that destroying either object 2937 takes effect immediately. If you need to synchronize the removal 2938 of a sub-surface to the parent surface update, unmap the sub-surface 2939 first by attaching a NULL wl_buffer, update parent, and then destroy 2940 the sub-surface. 2941 2942 If the parent wl_surface object is destroyed, the sub-surface is 2943 unmapped. 2944 </description> 2945 2946 <request name="destroy" type="destructor"> 2947 <description summary="remove sub-surface interface"> 2948 The sub-surface interface is removed from the wl_surface object 2949 that was turned into a sub-surface with a 2950 wl_subcompositor.get_subsurface request. The wl_surface's association 2951 to the parent is deleted, and the wl_surface loses its role as 2952 a sub-surface. The wl_surface is unmapped immediately. 2953 </description> 2954 </request> 2955 2956 <enum name="error"> 2957 <entry name="bad_surface" value="0" 2958 summary="wl_surface is not a sibling or the parent"/> 2959 </enum> 2960 2961 <request name="set_position"> 2962 <description summary="reposition the sub-surface"> 2963 This schedules a sub-surface position change. 2964 The sub-surface will be moved so that its origin (top left 2965 corner pixel) will be at the location x, y of the parent surface 2966 coordinate system. The coordinates are not restricted to the parent 2967 surface area. Negative values are allowed. 2968 2969 The scheduled coordinates will take effect whenever the state of the 2970 parent surface is applied. When this happens depends on whether the 2971 parent surface is in synchronized mode or not. See 2972 wl_subsurface.set_sync and wl_subsurface.set_desync for details. 2973 2974 If more than one set_position request is invoked by the client before 2975 the commit of the parent surface, the position of a new request always 2976 replaces the scheduled position from any previous request. 2977 2978 The initial position is 0, 0. 2979 </description> 2980 <arg name="x" type="int" summary="x coordinate in the parent surface"/> 2981 <arg name="y" type="int" summary="y coordinate in the parent surface"/> 2982 </request> 2983 2984 <request name="place_above"> 2985 <description summary="restack the sub-surface"> 2986 This sub-surface is taken from the stack, and put back just 2987 above the reference surface, changing the z-order of the sub-surfaces. 2988 The reference surface must be one of the sibling surfaces, or the 2989 parent surface. Using any other surface, including this sub-surface, 2990 will cause a protocol error. 2991 2992 The z-order is double-buffered. Requests are handled in order and 2993 applied immediately to a pending state. The final pending state is 2994 copied to the active state the next time the state of the parent 2995 surface is applied. When this happens depends on whether the parent 2996 surface is in synchronized mode or not. See wl_subsurface.set_sync and 2997 wl_subsurface.set_desync for details. 2998 2999 A new sub-surface is initially added as the top-most in the stack 3000 of its siblings and parent. 3001 </description> 3002 <arg name="sibling" type="object" interface="wl_surface" 3003 summary="the reference surface"/> 3004 </request> 3005 3006 <request name="place_below"> 3007 <description summary="restack the sub-surface"> 3008 The sub-surface is placed just below the reference surface. 3009 See wl_subsurface.place_above. 3010 </description> 3011 <arg name="sibling" type="object" interface="wl_surface" 3012 summary="the reference surface"/> 3013 </request> 3014 3015 <request name="set_sync"> 3016 <description summary="set sub-surface to synchronized mode"> 3017 Change the commit behaviour of the sub-surface to synchronized 3018 mode, also described as the parent dependent mode. 3019 3020 In synchronized mode, wl_surface.commit on a sub-surface will 3021 accumulate the committed state in a cache, but the state will 3022 not be applied and hence will not change the compositor output. 3023 The cached state is applied to the sub-surface immediately after 3024 the parent surface's state is applied. This ensures atomic 3025 updates of the parent and all its synchronized sub-surfaces. 3026 Applying the cached state will invalidate the cache, so further 3027 parent surface commits do not (re-)apply old state. 3028 3029 See wl_subsurface for the recursive effect of this mode. 3030 </description> 3031 </request> 3032 3033 <request name="set_desync"> 3034 <description summary="set sub-surface to desynchronized mode"> 3035 Change the commit behaviour of the sub-surface to desynchronized 3036 mode, also described as independent or freely running mode. 3037 3038 In desynchronized mode, wl_surface.commit on a sub-surface will 3039 apply the pending state directly, without caching, as happens 3040 normally with a wl_surface. Calling wl_surface.commit on the 3041 parent surface has no effect on the sub-surface's wl_surface 3042 state. This mode allows a sub-surface to be updated on its own. 3043 3044 If cached state exists when wl_surface.commit is called in 3045 desynchronized mode, the pending state is added to the cached 3046 state, and applied as a whole. This invalidates the cache. 3047 3048 Note: even if a sub-surface is set to desynchronized, a parent 3049 sub-surface may override it to behave as synchronized. For details, 3050 see wl_subsurface. 3051 3052 If a surface's parent surface behaves as desynchronized, then 3053 the cached state is applied on set_desync. 3054 </description> 3055 </request> 3056 </interface> 3057 3058 </protocol>