git.lucas.co / cce-ui
GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git

protocol/cce-window-management-v1.xml (88.2K)

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <protocol name="cce_window_management_v1">
   3   <copyright>
   4     SPDX-FileCopyrightText: © 2024 Isaac Freund
   5     SPDX-License-Identifier: MIT
   6     Permission is hereby granted, free of charge, to any person obtaining a copy
   7     of this software and associated documentation files (the "Software"), to
   8     deal in the Software without restriction, including without limitation the
   9     rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  10     sell copies of the Software, and to permit persons to whom the Software is
  11     furnished to do so, subject to the following conditions:
  12     The above copyright notice and this permission notice shall be included in
  13     all copies or substantial portions of the Software.
  14     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  19     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20     IN THE SOFTWARE.
  21   </copyright>
  22   <description summary="frame-perfect window management">
  23     This protocol allows a single "window manager" client to determine the
  24     window management policy of the compositor. State is globally
  25     double-buffered allowing for frame perfect state changes involving multiple
  26     windows.
  27     The key words "must", "must not", "required", "shall", "shall not",
  28     "should", "should not", "recommended", "may", and "optional" in this
  29     document are to be interpreted as described in IETF RFC 2119.
  30   </description>
  31   <interface name="zcce_window_manager_v1" version="7">
  32     <description summary="window manager global interface">
  33       This global interface should only be advertised to the window manager
  34       process. Only one window management client may be active at a time. The
  35       compositor should use the unavailable event if necessary to enforce this.
  36       There are two disjoint categories of state managed by this protocol:
  37       Window management state influences the communication between the
  38       compositor and individual windows (e.g. xdg_toplevels). Window management
  39       state includes window dimensions, fullscreen state, keyboard focus,
  40       keyboard bindings, and more.
  41       Rendering state only affects the rendered output of the compositor and
  42       does not influence communication between the compositor and individual
  43       windows. Rendering state includes the position and rendering order of
  44       windows, shell surfaces, decoration surfaces, borders, and more.
  45       Window management state may only be modified by the window manager as part
  46       of a manage sequence. A manage sequence is started with the manage_start
  47       event and ended with the manage_finish request. It is a protocol error to
  48       modify window management state outside of a manage sequence.
  49       A manage sequence is always followed by at least one render sequence. A
  50       render sequence is started with the render_start event and ended with the
  51       render_finish request.
  52       Rendering state may be modified by the window manager during a manage
  53       sequence or a render sequence. Regardless of when the rendering state is
  54       modified, it is applied with the next render_finish request. It is a
  55       protocol error to modify rendering state outside of a manage or render
  56       sequence.
  57       The server will start a manage sequence by sending new state and the
  58       manage_start event as soon as possible whenever there is a change in state
  59       that must be communicated with the window manager.
  60       If the window manager client needs to ensure a manage sequence is started
  61       due to a state change the compositor is not aware of, it may send the
  62       manage_dirty request.
  63       The server will start a render sequence by sending new state and the
  64       render_start event as soon as possible whenever there is a change in
  65       window dimensions that must be communicated with the window manager.
  66       Multiple render sequences may be made consecutively without a manage
  67       sequence in between, for example if a window independently changes its own
  68       dimensions.
  69       To summarize, the main loop of this protocol is as follows:
  70       1. The server sends events indicating all changes since the last
  71          manage sequence followed by the manage_start event.
  72       2. The client sends requests modifying window management state or
  73          rendering state (as defined above) followed by the manage_finish
  74          request.
  75       3. The server sends new state to windows and waits for responses.
  76       4. The server sends new window dimensions to the client followed by the
  77          render_start event.
  78       5. The client sends requests modifying rendering state (as defined above)
  79          followed by the render_finish request.
  80       6. If window dimensions change, loop back to step 4.
  81          If state that requires a manage sequence changes or if the client makes
  82          a manage_dirty request, loop back to step 1.
  83       For the purposes of frame perfection, the server may delay rendering new
  84       state committed by the windows in step 3 until after step 5 is finished.
  85       It is a protocol error for the client to make a manage_finish or
  86       render_finish request that violates this ordering.
  87     </description>
  88     <enum name="error">
  89       <entry name="sequence_order" value="0" summary="request violates manage/render sequence ordering"/>
  90       <entry name="role" value="1" summary="given wl_surface already has a role"/>
  91       <entry name="unresponsive" value="2" summary="window manager unresponsive"/>
  92     </enum>
  93     <event name="unavailable">
  94       <description summary="window management unavailable">
  95         This event indicates that window management is not available to the
  96         client, perhaps due to another window management client already running.
  97         The circumstances causing this event to be sent are compositor policy.
  98         If sent, this event is guaranteed to be the first and only event sent by
  99         the server.
 100         The server will send no further events on this object. The client should
 101         destroy this object and all objects created through this interface.
 102       </description>
 103     </event>
 104     <request name="stop">
 105       <description summary="stop sending events">
 106         This request indicates that the client no longer wishes to receive
 107         events on this object.
 108         The Wayland protocol is asynchronous, which means the server may send
 109         further events until the stop request is processed. The client must wait
 110         for a cce_window_manager_v1.finished event before destroying this
 111         object.
 112       </description>
 113     </request>
 114     <event name="finished">
 115       <description summary="the server has finished with the window manager">
 116         This event indicates that the server will send no further events on this
 117         object. The client should destroy the object. See
 118         cce_window_manager_v1.destroy for more information.
 119       </description>
 120     </event>
 121     <request name="destroy" type="destructor">
 122       <description summary="destroy the cce_window_manager_v1 object">
 123         This request should be called after the finished event has been received
 124         to complete destruction of the object.
 125         If a client wishes to destroy this object it should send a
 126         cce_window_manager_v1.stop request and wait for a
 127         cce_window_manager_v1.finished event. Once the finished event is
 128         received it is safe to destroy this object and any other objects created
 129         through this interface.
 130       </description>
 131     </request>
 132     <event name="manage_start">
 133       <description summary="start a manage sequence">
 134         This event indicates that the server has sent events indicating all
 135         state changes since the last manage sequence.
 136         In response to this event, the client should make requests modifying
 137         window management state as it chooses. Then, the client must make the
 138         manage_finish request.
 139         See the description of the cce_window_manager_v1 interface for a
 140         complete overview of the manage/render sequence loop.
 141       </description>
 142     </event>
 143     <request name="manage_finish">
 144       <description summary="finish a manage sequence">
 145         This request indicates that the client has made all changes to window
 146         management state it wishes to include in the current manage sequence and
 147         that the server should atomically send these state changes to the
 148         windows and continue with the manage sequence.
 149         After sending this request, it is a protocol error for the client to
 150         make further changes to window management state until the next
 151         manage_start event is received.
 152         See the description of the cce_window_manager_v1 interface for a
 153         complete overview of the manage/render sequence loop.
 154       </description>
 155     </request>
 156     <request name="manage_dirty">
 157       <description summary="ensure a manage sequence is started">
 158         This request ensures a manage sequence is started and that a
 159         manage_start event is sent by the server. If this request is made during
 160         an ongoing manage sequence, a new manage sequence will be started as
 161         soon as the current one is completed.
 162         The client may want to use this request due to an internal state change
 163         that the compositor is not aware of (e.g. a dbus event) which should
 164         affect window management or rendering state.
 165       </description>
 166     </request>
 167     <event name="render_start">
 168       <description summary="start a render sequence">
 169         This event indicates that the server has sent all
 170         cce_window_v1.dimensions events necessary.
 171         In response to this event, the client should make requests modifying
 172         rendering state as it chooses. Then, the client must make the
 173         render_finish request.
 174         See the description of the cce_window_manager_v1 interface for a
 175         complete overview of the manage/render sequence loop.
 176       </description>
 177     </event>
 178     <request name="render_finish">
 179       <description summary="finish a render sequence">
 180         This request indicates that the client has made all changes to rendering
 181         state it wishes to include in the current manage sequence and that the
 182         server should atomically apply and display these state changes to the
 183         user.
 184         After sending this request, it is a protocol error for the client to
 185         make further changes to rendering state until the next manage_start or
 186         render_start event is received, whichever comes first.
 187         See the description of the cce_window_manager_v1 interface for a
 188         complete overview of the manage/render sequence loop.
 189       </description>
 190     </request>
 191     <event name="session_locked">
 192       <description summary="the session has been locked">
 193         This event indicates that the session has been locked.
 194         The window manager may wish to restrict which key bindings are available
 195         while locked or otherwise use this information.
 196         This event will be followed by a manage_start event after all other new
 197         state has been sent by the server.
 198       </description>
 199     </event>
 200     <event name="session_unlocked">
 201       <description summary="the session has been unlocked">
 202         This event indicates that the session has been unlocked.
 203         This event will be followed by a manage_start event after all other new
 204         state has been sent by the server.
 205       </description>
 206     </event>
 207     <event name="window">
 208       <description summary="new window">
 209         A new window has been created.
 210         This event will be followed by a manage_start event after all other new
 211         state has been sent by the server.
 212       </description>
 213       <arg name="id" type="new_id" interface="zcce_window_v1" summary="new window"/>
 214     </event>
 215     <event name="output">
 216       <description summary="new output">
 217         A new logical output has been created, perhaps due to a new physical
 218         monitor being plugged in or perhaps due to a change in configuration.
 219         This event will be followed by cce_output_v1.position and dimensions
 220         events as well as a manage_start event after all other new state has
 221         been sent by the server.
 222       </description>
 223       <arg name="id" type="new_id" interface="zcce_output_v1" summary="new output"/>
 224     </event>
 225     <event name="seat">
 226       <description summary="new seat">
 227         A new seat has been created.
 228         This event will be followed by a manage_start event after all other new
 229         state has been sent by the server.
 230       </description>
 231       <arg name="id" type="new_id" interface="zcce_seat_v1" summary="new seat"/>
 232     </event>
 233     <request name="get_shell_surface">
 234       <description summary="assign the cce_shell_surface_v1 surface role">
 235         Create a new shell surface for window manager UI and assign the
 236         cce_shell_surface_v1 role to the surface.
 237         Providing a wl_surface which already has a role or already has a buffer
 238         attached or committed is a protocol error.
 239       </description>
 240       <arg name="id" type="new_id" interface="zcce_shell_surface_v1" summary="new river shell surface"/>
 241       <arg name="surface" type="object" interface="wl_surface" summary="base surface"/>
 242     </request>
 243     <request name="exit_session" since="4">
 244       <description summary="exit the Wayland session">
 245         End the current Wayland session and exit the compositor.
 246         All Wayland clients running in the current session, including
 247         the window manager, will be disconnected.
 248         Window managers should only make this request if the user explicitly
 249         asks to exit the Wayland session, not for example on normal window
 250         manager termination.
 251       </description>
 252     </request>
 253     <request name="get_cce_toplevel">
 254       <description summary="get a cce toplevel for a surface">
 255         Create a zcce_toplevel_v1 object for a given wl_surface.
 256       </description>
 257       <arg name="id" type="new_id" interface="zcce_toplevel_v1"/>
 258       <arg name="surface" type="object" interface="wl_surface"/>
 259     </request>
 260   </interface>
 261   <interface name="zcce_window_v1" version="4">
 262     <description summary="a logical window">
 263       This represents a logical window. For example, a window may correspond to
 264       an xdg_toplevel or Xwayland window.
 265       A newly created window will not be displayed until the window manager
 266       makes a propose_dimensions or fullscreen request as part of a manage
 267       sequence, the server replies with a dimensions event as part of a render
 268       sequence, and that render sequence is finished.
 269     </description>
 270     <enum name="error">
 271       <entry name="node_exists" value="0" summary="window already has a node object"/>
 272       <entry name="invalid_dimensions" value="1" summary="proposed dimensions out of bounds"/>
 273       <entry name="invalid_border" value="2" summary="invalid arg to set_borders"/>
 274       <entry name="invalid_clip_box" value="3" summary="invalid arg to set_clip_box"/>
 275     </enum>
 276     <request name="destroy" type="destructor">
 277       <description summary="destroy the window object">
 278         This request indicates that the client will no longer use the window
 279         object and that it may be safely destroyed.
 280         This request should be made after the cce_window_v1.closed event or
 281         cce_window_manager_v1.finished is received to complete destruction of
 282         the window.
 283       </description>
 284     </request>
 285     <event name="closed">
 286       <description summary="the window has been closed">
 287         The window has been closed by the server, perhaps due to an
 288         xdg_toplevel.close request or similar.
 289         The server will send no further events on this object and ignore any
 290         request other than cce_window_v1.destroy made after this event is
 291         sent. The client should destroy this object with the
 292         cce_window_v1.destroy request to free up resources.
 293         This event will be followed by a manage_start event after all other new
 294         state has been sent by the server.
 295       </description>
 296     </event>
 297     <request name="close">
 298       <description summary="request that the window be closed">
 299         Request that the window be closed. The window may ignore this request or
 300         only close after some delay, perhaps opening a dialog asking the user to
 301         save their work or similar.
 302         The server will send a cce_window_v1.closed event if/when the window
 303         has been closed.
 304         This request modifies window management state and may only be made as
 305         part of a manage sequence, see the cce_window_manager_v1 description.
 306       </description>
 307     </request>
 308     <request name="get_node">
 309       <description summary="get the window's render list node">
 310         Get the node in the render list corresponding to the window.
 311         It is a protocol error to make this request more than once for a single
 312         window.
 313       </description>
 314       <arg name="id" type="new_id" interface="zcce_node_v1" summary="new node"/>
 315     </request>
 316     <event name="dimensions_hint">
 317       <description summary="the window's preferred min/max dimensions">
 318         This event informs the window manager of the window's preferred min/max
 319         dimensions. These preferences are a hint, and the window manager is free
 320         to propose dimensions outside of these bounds.
 321         All min/max width/height values must be strictly greater than or equal
 322         to 0. A value of 0 indicates that the window has no preference for that
 323         value.
 324         The min_width/min_height must be strictly less than or equal to the
 325         max_width/max_height.
 326         This event will be followed by a manage_start event after all other new
 327         state has been sent by the server.
 328       </description>
 329       <arg name="min_width" type="int" summary="minimum width"/>
 330       <arg name="min_height" type="int" summary="minimum height"/>
 331       <arg name="max_width" type="int" summary="maximum width"/>
 332       <arg name="max_height" type="int" summary="maximum height"/>
 333     </event>
 334     <event name="dimensions">
 335       <description summary="window dimensions">
 336         This event indicates the dimensions of the window in the compositor's
 337         logical coordinate space. The width and height must be strictly greater
 338         than zero.
 339         Note that the dimensions of a cce_window_v1 refer to the dimensions of
 340         the window content and are unaffected by the presence of borders or
 341         decoration surfaces.
 342         This event is sent as part of a render sequence before the render_start
 343         event.
 344         It may be sent due to a propose_dimensions or fullscreen request in a
 345         previous manage sequence or because a window independently decides to
 346         change its dimensions.
 347         The window will not be displayed until the first dimensions event is
 348         received and the render sequence is finished.
 349       </description>
 350       <arg name="width" type="int" summary="window content width"/>
 351       <arg name="height" type="int" summary="window content height"/>
 352     </event>
 353     <request name="propose_dimensions">
 354       <description summary="propose window dimensions">
 355         This request proposes dimensions for the window in the compositor's
 356         logical coordinate space.
 357         The width and height must be greater than or equal to zero. If the width
 358         or height is zero the window will be allowed to decide its own
 359         dimensions.
 360         The window may not take the exact dimensions proposed. The actual
 361         dimensions taken by the window will be sent in a subsequent
 362         cce_window_v1.dimensions event. For example, a terminal emulator may
 363         only allow dimensions that are multiple of the cell size.
 364         When a propose_dimensions request is made, the server must send a
 365         dimensions event in response as soon as possible. It may not be possible
 366         to send a dimensions event in the very next render sequence if, for
 367         example, the window takes too long to respond to the proposed
 368         dimensions. In this case, the server will send the dimensions event in a
 369         future render sequence.
 370         Note that the dimensions of a cce_window_v1 refer to the dimensions of
 371         the window content and are unaffected by the presence of borders or
 372         decoration surfaces.
 373         This request modifies window management state and may only be made as
 374         part of a manage sequence, see the cce_window_manager_v1 description.
 375       </description>
 376       <arg name="width" type="int" summary="proposed content width"/>
 377       <arg name="height" type="int" summary="proposed content height"/>
 378     </request>
 379     <request name="hide">
 380       <description summary="request that the window be hidden">
 381         Request that the window be hidden. Has no effect if the window is
 382         already hidden. Hides any window borders and decorations as well.
 383         Newly created windows are considered shown unless explicitly hidden with
 384         the hide request.
 385         This request modifies rendering state and may only be made as part of a
 386         render sequence, see the cce_window_manager_v1 description.
 387       </description>
 388     </request>
 389     <request name="show">
 390       <description summary="request that the window be shown">
 391         Request that the window be shown. Has no effect if the window is not
 392         hidden. Does not guarantee that the window is visible as it may be
 393         completely obscured by other windows placed above it for example.
 394         Newly created windows are considered shown unless explicitly hidden with
 395         the hide request.
 396         This request modifies rendering state and may only be made as part of a
 397         render sequence, see the cce_window_manager_v1 description.
 398       </description>
 399     </request>
 400     <event name="app_id">
 401       <description summary="the window set an application ID">
 402         The window set an application ID.
 403         The app_id argument will be null if the window has never set an
 404         application ID or if the window cleared its application ID. (Xwayland
 405         windows may do this for example, though xdg-toplevels may not.)
 406         This event will be followed by a manage_start event after all other new
 407         state has been sent by the server.
 408       </description>
 409       <arg name="app_id" type="string" allow-null="true" summary="window application ID"/>
 410     </event>
 411     <event name="title">
 412       <description summary="the window set a title">
 413         The window set a title.
 414         The title argument will be null if the window has never set a title or
 415         if the window cleared its title. (Xwayland windows may do this for
 416         example, though xdg-toplevels may not.)
 417         This event will be followed by a manage_start event after all other new
 418         state has been sent by the server.
 419       </description>
 420       <arg name="title" type="string" allow-null="true" summary="window title"/>
 421     </event>
 422     <event name="parent">
 423       <description summary="the window set a parent">
 424         The window set a parent window. If this event is never received or if
 425         the parent argument is null then the window has no parent.
 426         A surface with a parent set might be a dialog, file picker, or similar
 427         for the parent window.
 428         Child windows should generally be rendered directly above their parent.
 429         The compositor must guarantee that there are no loops in the window
 430         tree: a parent must not be the descendant of one of its children.
 431         This event will be followed by a manage_start event after all other new
 432         state has been sent by the server.
 433       </description>
 434       <arg name="parent" type="object" allow-null="true" interface="zcce_window_v1" summary="parent window, if any"/>
 435     </event>
 436     <enum name="decoration_hint">
 437       <entry name="only_supports_csd" value="0" summary="only supports client side decoration"/>
 438       <entry name="prefers_csd" value="1" summary="client side decoration preferred, both CSD and SSD supported"/>
 439       <entry name="prefers_ssd" value="2" summary="server side decoration preferred, both CSD and SSD supported"/>
 440       <entry name="no_preference" value="3" summary="no preference, both CSD and SSD supported"/>
 441     </enum>
 442     <event name="decoration_hint">
 443       <description summary="supported/preferred decoration style">
 444         Information from the window about the supported and preferred client
 445         side/server side decoration options.
 446         This event may be sent multiple times over the lifetime of the window if
 447         the window changes its preferences.
 448         This event will be followed by a manage_start event after all other new
 449         state has been sent by the server.
 450       </description>
 451       <arg name="hint" type="uint" enum="decoration_hint" summary="decoration hint"/>
 452     </event>
 453     <request name="use_csd">
 454       <description summary="tell the client to use CSD">
 455         Tell the client to use client side decoration and draw its own title
 456         bar, borders, etc.
 457         This is the default if neither this request nor the use_ssd request is
 458         ever made.
 459         This request modifies window management state and may only be made as
 460         part of a manage sequence, see the cce_window_manager_v1 description.
 461       </description>
 462     </request>
 463     <request name="use_ssd">
 464       <description summary="tell the client to use SSD">
 465         Tell the client to use server side decoration and not draw any client
 466         side decorations.
 467         This request will have no effect if the client only supports client side
 468         decoration, see the decoration_hint event.
 469         This request modifies window management state and may only be made as
 470         part of a manage sequence, see the cce_window_manager_v1 description.
 471       </description>
 472     </request>
 473     <enum name="edges" bitfield="true">
 474       <entry name="none" value="0"/>
 475       <entry name="top" value="1"/>
 476       <entry name="bottom" value="2"/>
 477       <entry name="left" value="4"/>
 478       <entry name="right" value="8"/>
 479     </enum>
 480     <request name="set_borders">
 481       <description summary="set window borders">
 482         This request decorates the window with borders drawn by the compositor
 483         on the specified edges of the window. Borders are drawn above the window
 484         content.
 485         Corners are drawn only between borders on adjacent edges. If e.g. the
 486         left edge has a border and the top edge does not, the border drawn on
 487         the left edge will not extend vertically beyond the top edge of the
 488         window.
 489         Borders are not drawn while the window is fullscreen.
 490         The color is defined by four 32-bit RGBA values. Unless specified in
 491         another protocol extension, the RGBA values use pre-multiplied alpha.
 492         The valid range for the RGBA values is from 0x00000000 to 0xffffffff.
 493         These values are interpreted as a percentage:
 494         - 0x00000000 means 0% of the given color component
 495         - 0xffffffff means 100% of the given color component
 496         Setting the edges to none or the width to 0 disables the borders.
 497         Setting a negative width is a protocol error.
 498         This request completely overrides all previous set_borders requests.
 499         Only the most recent set_borders request has an effect.
 500         Note that the position/dimensions of a cce_window_v1 refer to the
 501         position/dimensions of the window content and are unaffected by the
 502         presence of borders or decoration surfaces.
 503         This request modifies rendering state and may only be made as part of a
 504         render sequence, see the cce_window_manager_v1 description.
 505       </description>
 506       <arg name="edges" type="uint" enum="edges" summary="border edges"/>
 507       <arg name="width" type="int" summary="border width"/>
 508       <arg name="r" type="uint" summary="32-bit red value"/>
 509       <arg name="g" type="uint" summary="32-bit green value"/>
 510       <arg name="b" type="uint" summary="32-bit blue value"/>
 511       <arg name="a" type="uint" summary="32-bit alpha value"/>
 512     </request>
 513     <request name="set_tiled">
 514       <description summary="set window tiled state">
 515         Inform the window that it is part of a tiled layout and adjacent to
 516         other elements in the tiled layout on the given edges.
 517         The window should use this information to change the style of its client
 518         side decorations and avoid drawing e.g. drop shadows outside of the
 519         window dimensions on the tiled edges.
 520         Setting the edges argument to none informs the window that it is not
 521         part of a tiled layout. If this request is never made, the window is
 522         informed that it is not part of a tiled layout.
 523         This request modifies window management state and may only be made as
 524         part of a manage sequence, see the cce_window_manager_v1 description.
 525       </description>
 526       <arg name="edges" type="uint" enum="edges" summary="tiled edges"/>
 527     </request>
 528     <request name="get_decoration_above">
 529       <description summary="create a decoration above the window in z-order">
 530         Create a decoration surface and assign the cce_decoration_v1 role to
 531         the surface. The created decoration is placed above the window in
 532         rendering order, see the description of cce_decoration_v1.
 533         Providing a wl_surface which already has a role or already has a buffer
 534         attached or committed is a protocol error.
 535       </description>
 536       <arg name="id" type="new_id" interface="zcce_decoration_v1" summary="new decoration surface"/>
 537       <arg name="surface" type="object" interface="wl_surface" summary="base surface"/>
 538     </request>
 539     <request name="get_decoration_below">
 540       <description summary="create a decoration below the window in z-order">
 541         Create a decoration surface and assign the cce_decoration_v1 role to
 542         the surface. The created decoration is placed below the window in
 543         rendering order, see the description of cce_decoration_v1.
 544         Providing a wl_surface which already has a role or already has a buffer
 545         attached or committed is a protocol error.
 546       </description>
 547       <arg name="id" type="new_id" interface="zcce_decoration_v1" summary="new decoration surface"/>
 548       <arg name="surface" type="object" interface="wl_surface" summary="base surface"/>
 549     </request>
 550     <event name="pointer_move_requested">
 551       <description summary="window requested interactive pointer move">
 552         This event informs the window manager that the window has requested to
 553         be interactively moved using the pointer. The seat argument indicates the
 554         seat for the move.
 555         The xdg-shell protocol for example allows windows to request that an
 556         interactive move be started, perhaps when a client-side rendered
 557         titlebar is dragged.
 558         The window manager may use the cce_seat_v1.op_start_pointer request to
 559         interactively move the window or ignore this event entirely.
 560         This event will be followed by a manage_start event after all other new
 561         state has been sent by the server.
 562       </description>
 563       <arg name="seat" type="object" interface="zcce_seat_v1" summary="requested seat"/>
 564     </event>
 565     <event name="pointer_resize_requested">
 566       <description summary="window requested interactive pointer resize">
 567         This event informs the window manager that the window has requested to
 568         be interactively resized using the pointer. The seat argument indicates
 569         the seat for the resize.
 570         The edges argument indicates which edges the window has requested to be
 571         resized from. The edges argument will never be none and will never have
 572         both top and bottom or both left and right edges set.
 573         The xdg-shell protocol for example allows windows to request that an
 574         interactive resize be started, perhaps when the corner of client-side
 575         rendered decorations is dragged.
 576         The window manager may use the cce_seat_v1.op_start_pointer request to
 577         interactively resize the window or ignore this event entirely.
 578         This event will be followed by a manage_start event after all other new
 579         state has been sent by the server.
 580       </description>
 581       <arg name="seat" type="object" interface="zcce_seat_v1" summary="requested seat"/>
 582       <arg name="edges" type="uint" enum="edges" summary="requested edges"/>
 583     </event>
 584     <request name="inform_resize_start">
 585       <description summary="inform the window it is being resized">
 586         Inform the window that it is being resized. The window manager should
 587         use this request to inform windows that are the target of an interactive
 588         resize for example.
 589         The window manager remains responsible for handling the position and
 590         dimensions of the window while it is resizing.
 591         This request modifies window management state and may only be made as
 592         part of a manage sequence, see the cce_window_manager_v1 description.
 593       </description>
 594     </request>
 595     <request name="inform_resize_end">
 596       <description summary="inform the window it no longer being resized">
 597         Inform the window that it is no longer being resized. The window manager
 598         should use this request to inform windows that are the target of an
 599         interactive resize that the interactive resize has ended for example.
 600         This request modifies window management state and may only be made as
 601         part of a manage sequence, see the cce_window_manager_v1 description.
 602       </description>
 603     </request>
 604     <enum name="capabilities" bitfield="true">
 605       <entry name="window_menu" value="1"/>
 606       <entry name="maximize" value="2"/>
 607       <entry name="fullscreen" value="4"/>
 608       <entry name="minimize" value="8"/>
 609     </enum>
 610     <request name="set_capabilities">
 611       <description summary="inform window of supported capabilities">
 612         This request informs the window of the capabilities supported by the
 613         window manager. If the window manager, for example, ignores requests to
 614         be maximized from the window it should not tell the window that it
 615         supports the maximize capability.
 616         The window might use this information to, for example, only show a
 617         maximize button if the window manager supports the maximize capability.
 618         The window manager client should use this request to set capabilities
 619         for all new windows. If this request is never made, the compositor will
 620         inform windows that all capabilities are supported.
 621         This request modifies window management state and may only be made as
 622         part of a manage sequence, see the cce_window_manager_v1 description.
 623       </description>
 624       <arg name="caps" type="uint" enum="capabilities" summary="supported capabilities"/>
 625     </request>
 626     <event name="show_window_menu_requested">
 627       <description summary="window requested that the window menu be shown">
 628         The xdg-shell protocol for example allows windows to request that a
 629         window menu be shown, for example when the user right clicks on client
 630         side window decorations.
 631         A window menu might include options to maximize or minimize the window.
 632         The window manager is free to ignore this request and decide what the
 633         window menu contains if it does choose to show one.
 634         The x and y arguments indicate where the window requested that the
 635         window menu be shown.
 636         This event will be followed by a manage_start event after all other new
 637         state has been sent by the server.
 638       </description>
 639       <arg name="x" type="int" summary="x offset from top left corner"/>
 640       <arg name="y" type="int" summary="y offset from top left corner"/>
 641     </event>
 642     <event name="maximize_requested">
 643       <description summary="the window requested to be maximized">
 644         The xdg-shell protocol for example allows windows to request to be
 645         maximized.
 646         The window manager is free to honor this request using
 647         cce_window_v1.inform_maximized or ignore it.
 648         This event will be followed by a manage_start event after all other new
 649         state has been sent by the server.
 650       </description>
 651     </event>
 652     <event name="unmaximize_requested">
 653       <description summary="the window requested to be unmaximized">
 654         The xdg-shell protocol for example allows windows to request to be
 655         unmaximized.
 656         The window manager is free to honor this request using
 657         cce_window_v1.inform_unmaximized or ignore it.
 658         This event will be followed by a manage_start event after all other new
 659         state has been sent by the server.
 660       </description>
 661     </event>
 662     <request name="inform_maximized">
 663       <description summary="inform the window that it is maximized">
 664         Inform the window that it is maximized. The window might use this
 665         information to adapt the style of its client-side window decorations for
 666         example.
 667         The window manager remains responsible for handling the position and
 668         dimensions of the window while it is maximized.
 669         This request modifies window management state and may only be made as
 670         part of a manage sequence, see the cce_window_manager_v1 description.
 671       </description>
 672     </request>
 673     <request name="inform_unmaximized">
 674       <description summary="inform the window that it is unmaximized">
 675         Inform the window that it is unmaximized. The window might use this
 676         information to adapt the style of its client-side window decorations for
 677         example.
 678         This request modifies window management state and may only be made as
 679         part of a manage sequence, see the cce_window_manager_v1 description.
 680       </description>
 681     </request>
 682     <event name="fullscreen_requested">
 683       <description summary="the window requested to be fullscreen">
 684         The xdg-shell protocol for example allows windows to request that they
 685         be made fullscreen and allows them to provide an optional output hint.
 686         If the output argument is null, the window has no preference and the
 687         window manager should choose an output.
 688         The window manager is free to honor this request using
 689         cce_window_v1.fullscreen or ignore it.
 690         This event will be followed by a manage_start event after all other new
 691         state has been sent by the server.
 692       </description>
 693       <arg name="output" type="object" allow-null="true" interface="zcce_output_v1" summary="fullscreen output requested"/>
 694     </event>
 695     <event name="exit_fullscreen_requested">
 696       <description summary="the window requested to exit fullscreen">
 697         The xdg-shell protocol for example allows windows to request to exit
 698         fullscreen.
 699         The window manager is free to honor this request using
 700         cce_window_v1.exit_fullscreen or ignore it.
 701         This event will be followed by a manage_start event after all other new
 702         state has been sent by the server.
 703       </description>
 704     </event>
 705     <request name="inform_fullscreen">
 706       <description summary="inform the window that it is fullscreen">
 707         Inform the window that it is fullscreen. The window might use this
 708         information to adapt the style of its client-side window decorations for
 709         example.
 710         This request does not affect the size/position of the window or cause it
 711         to become the only window rendered, see the cce_window_v1.fullscreen
 712         and exit_fullscreen requests for that.
 713         This request modifies window management state and may only be made as
 714         part of a manage sequence, see the cce_window_manager_v1 description.
 715       </description>
 716     </request>
 717     <request name="inform_not_fullscreen">
 718       <description summary="inform the window that it is not fullscreen">
 719         Inform the window that it is not fullscreen. The window might use this
 720         information to adapt the style of its client-side window decorations for
 721         example.
 722         This request does not affect the size/position of the window or cause it
 723         to become the only window rendered, see the cce_window_v1.fullscreen
 724         and exit_fullscreen requests for that.
 725         This request modifies window management state and may only be made as
 726         part of a manage sequence, see the cce_window_manager_v1 description.
 727       </description>
 728     </request>
 729     <request name="fullscreen">
 730       <description summary="make the window fullscreen">
 731         Make the window fullscreen on the given output. If multiple windows are
 732         fullscreen on the same output at the same time only the "top" window in
 733         rendering order shall be displayed.
 734         All cce_shell_surface_v1 objects above the top fullscreen window in
 735         the rendering order will continue to be rendered.
 736         The compositor will handle the position and dimensions of the window
 737         while it is fullscreen. The set_position and propose_dimensions requests
 738         shall not affect the current position and dimensions of a fullscreen
 739         window.
 740         When a fullscreen request is made, the server must send a dimensions
 741         event in response as soon as possible. It may not be possible to send a
 742         dimensions event in the very next render sequence if, for example, the
 743         window takes too long to respond. In this case, the server will send the
 744         dimensions event in a future render sequence.
 745         The compositor will clip window content, decoration surfaces, and
 746         borders to the given output's dimensions while the window is fullscreen.
 747         The effects of set_clip_box and set_content_clip_box are ignored while
 748         the window is fullscreen.
 749         If the output on which a window is currently fullscreen is removed, the
 750         windowing state is modified as if there were an exit_fullscreen request
 751         made in the same manage sequence as the cce_output_v1.removed event.
 752         This request does not inform the window that it is fullscreen, see the
 753         cce_window_v1.inform_fullscreen and inform_not_fullscreen requests.
 754         This request modifies window management state and may only be made as
 755         part of a manage sequence, see the cce_window_manager_v1 description.
 756       </description>
 757       <arg name="output" type="object" interface="zcce_output_v1" summary="fullscreen output"/>
 758     </request>
 759     <request name="exit_fullscreen">
 760       <description summary="make the window not fullscreen">
 761         Make the window not fullscreen.
 762         The position and dimensions are undefined after this request is made
 763         until a manage sequence in which the window manager makes the
 764         propose_dimensions and set_position requests is completed.
 765         The window manager should make propose_dimensions and set_position
 766         requests in the same manage sequence as the exit_fullscreen request for
 767         frame perfection.
 768         This request does not inform the window that it is fullscreen, see the
 769         cce_window_v1.inform_fullscreen and inform_not_fullscreen requests.
 770         This request modifies window management state and may only be made as
 771         part of a manage sequence, see the cce_window_manager_v1 description.
 772       </description>
 773     </request>
 774     <event name="minimize_requested">
 775       <description summary="the window requested to be minimized">
 776         The xdg-shell protocol for example allows windows to request to be
 777         minimized.
 778         The window manager is free to ignore this request, hide the window, or
 779         do whatever else it chooses.
 780         This event will be followed by a manage_start event after all other new
 781         state has been sent by the server.
 782       </description>
 783     </event>
 784     <request name="set_clip_box" since="2">
 785       <description summary="clip the window to a given box">
 786         Clip the window, including borders and decoration surfaces, to the box
 787         specified by the x, y, width, and height arguments. The x/y position of
 788         the box is relative to the top left corner of the window.
 789         The width and height arguments must be greater than or equal to 0.
 790         Setting a clip box with 0 width or height disables clipping.
 791         The clip box is ignored while the window is fullscreen.
 792         Both set_clip_box and set_content_clip_box may be enabled simultaneously.
 793         This request modifies rendering state and may only be made as part of a
 794         render sequence, see the cce_window_manager_v1 description.
 795       </description>
 796       <arg name="x" type="int" summary="x relative to top left window corner"/>
 797       <arg name="y" type="int" summary="y relative to top left window corner"/>
 798       <arg name="width" type="int" summary="clip box width"/>
 799       <arg name="height" type="int" summary="clip box height"/>
 800     </request>
 801     <event name="unreliable_pid" since="2">
 802       <description summary="unreliable PID of the window's creator">
 803         This event gives an unreliable PID of the process that created the
 804         window. Obtaining this information is inherently racy due to PID reuse.
 805         Therefore, this PID must not be used for anything security sensitive.
 806         Note also that a single process may create multiple windows, so there is
 807         not necessarily a 1-to-1 mapping from PID to window. Multiple windows
 808         may have the same PID.
 809         This event is sent once when the cce_window_v1 is created and never
 810         sent again.
 811       </description>
 812       <arg name="unreliable_pid" type="int" summary="unreliable PID"/>
 813     </event>
 814     <request name="set_content_clip_box" since="3">
 815       <description summary="clip the window content to a given box">
 816         Clip the content of the window, excluding borders and decoration
 817         surfaces, to the box specified by the x, y, width, and height arguments.
 818         The x/y position of the box is relative to the top left corner of the
 819         window.
 820         Borders drawn by the compositor (see set_borders) are placed around the
 821         intersection of the window content (as defined by the dimensions event)
 822         and the content clip box when content clipping is enabled.
 823         The width and height arguments must be greater than or equal to 0.
 824         Setting a box with 0 width or height disables content clipping.
 825         The content clip box is ignored while the window is fullscreen.
 826         Both set_clip_box and set_content_clip_box may be enabled simultaneously.
 827         This request modifies rendering state and may only be made as part of a
 828         render sequence, see the cce_window_manager_v1 description.
 829       </description>
 830       <arg name="x" type="int" summary="x relative to top left window corner"/>
 831       <arg name="y" type="int" summary="y relative to top left window corner"/>
 832       <arg name="width" type="int" summary="clip box width"/>
 833       <arg name="height" type="int" summary="clip box height"/>
 834     </request>
 835     <event name="presentation_hint" since="4">
 836       <description summary="presentation hint set by the window">
 837         This event communicates the window's preferred presentation mode.
 838         This event will be followed by a render_start event after all other new
 839         state has been sent by the server.
 840       </description>
 841       <arg name="hint" type="uint" summary="presentation hint"/>
 842     </event>
 843     <event name="identifier" since="4">
 844       <description summary="unique window identifier">
 845         The identifier is a string that contains up to 32 printable ASCII bytes.
 846         The identifier must not be an empty string.
 847         It is compositor policy how the identifier is generated, but the following
 848         properties must be upheld:
 849         1. The identifier must uniquely identify the window. Two windows must not
 850            share the same identifier.
 851         2. The identifier must not be reused. This avoids races around window
 852            creation/destruction when identifiers are used in out-of-band IPC.
 853         If the compositor implements the ext-foreign-toplevel-list-v1 protocol,
 854         the cce_window_v1.identifier event must match the corresponding
 855         ext_foreign_toplevel_handle_v1.identifier event.
 856         This event is sent once when the cce_window_v1 is created and never
 857         sent again.
 858       </description>
 859       <arg name="identifier" type="string" summary="unique identifier"/>
 860     </event>
 861     <request name="set_dimension_bounds" since="4">
 862       <description summary="recommend maximum dimensions to the window">
 863         Recommend that the window keep its dimensions within a given
 864         maximum width/height. This recommendation is only a hint and the window
 865         may ignore it.
 866         Setting the width and height to 0 indicates that there are no bounds
 867         and is equivalent to having never made this request.
 868         Setting width or height to a negative value is a protocol error.
 869         The server should communicate this hint to an xdg_toplevel window with
 870         the xdg_toplevel.configure_bounds event for example.
 871         This request modifies window management state and may only be made as
 872         part of a manage sequence, see the cce_window_manager_v1 description.
 873       </description>
 874       <arg name="max_width" type="int" summary="maximum width"/>
 875       <arg name="max_height" type="int" summary="maximum height"/>
 876     </request>
 877     <request name="set_opacity" since="4">
 878       <description summary="set the window opacity">
 879         Set the window opacity, from 0 (fully transparent) to 0xffffffff (fully opaque).
 880         This request modifies rendering state and may only be made as part of a
 881         render sequence, see the cce_window_manager_v1 description.
 882       </description>
 883       <arg name="opacity" type="uint" summary="opacity value from 0 to 0xffffffff"/>
 884     </request>
 885     <request name="set_circular" since="4">
 886       <description summary="set whether the window is circular">
 887         Set whether the window is circular (1 for circular, 0 for rectangular).
 888         This request modifies rendering state and may only be made as part of a
 889         render sequence, see the cce_window_manager_v1 description.
 890       </description>
 891       <arg name="circular" type="uint" summary="1 if circular, 0 otherwise"/>
 892     </request>
 893     <request name="set_blur" since="4">
 894       <description summary="set whether backdrop blur is enabled">
 895         Set whether backdrop blur should be enabled for this window.
 896         1 to enable, 0 to disable.
 897         This request modifies rendering state and may only be made as part of a
 898         render sequence, see the cce_window_manager_v1 description.
 899       </description>
 900       <arg name="blur" type="uint" summary="1 to enable, 0 to disable"/>
 901     </request>
 902   </interface>
 903   <interface name="zcce_decoration_v1" version="4">
 904     <description summary="a window decoration">
 905       The rendering order of windows with decorations is follows:
 906       1. Decorations created with get_decoration_below at the bottom
 907       2. Window content
 908       3. Borders configured with cce_window_v1.set_borders
 909       4. Decorations created with get_decoration_above at the top
 910       The relative ordering of decoration surfaces above/below a window is
 911       undefined by this protocol and left up to the compositor.
 912     </description>
 913     <enum name="error">
 914       <entry name="no_commit" value="0" summary="failed to commit the surface before the window manager commit"/>
 915     </enum>
 916     <request name="destroy" type="destructor">
 917       <description summary="destroy the decoration object">
 918         This request indicates that the client will no longer use the decoration
 919         object and that it may be safely destroyed.
 920       </description>
 921     </request>
 922     <request name="set_offset">
 923       <description summary="set offset from the window's top left corner">
 924         This request sets the offset of the decoration surface from the top left
 925         corner of the window.
 926         If this request is never sent, the x and y offsets are undefined by this
 927         protocol and left up to the compositor.
 928         This request modifies rendering state and may only be made as part of a
 929         render sequence, see the cce_window_manager_v1 description.
 930       </description>
 931       <arg name="x" type="int" summary="x relative to top left window corner"/>
 932       <arg name="y" type="int" summary="y relative to top left window corner"/>
 933     </request>
 934     <request name="sync_next_commit">
 935       <description summary="sync next commit with other rendering state">
 936         Synchronize application of the next wl_surface.commit request on the
 937         decoration surface with rest of the state atomically applied with the
 938         next cce_window_manager_v1.render_finish request.
 939         The client must make a wl_surface.commit request on the decoration
 940         surface after this request and before the render_finish request, failure
 941         to do so is a protocol error.
 942         This request modifies rendering state and may only be made as part of a
 943         render sequence, see the cce_window_manager_v1 description.
 944       </description>
 945     </request>
 946     <request name="set_blur" since="4">
 947       <description summary="set whether backdrop blur is enabled">
 948         Set whether backdrop blur should be enabled for this decoration.
 949         1 to enable, 0 to disable.
 950         This request modifies rendering state and may only be made as part of a
 951         render sequence, see the cce_window_manager_v1 description.
 952       </description>
 953       <arg name="blur" type="uint" summary="1 to enable, 0 to disable"/>
 954     </request>
 955   </interface>
 956   <interface name="zcce_shell_surface_v1" version="4">
 957     <description summary="a surface for window manager UI">
 958       The window manager might use a shell surface to display a status bar,
 959       background image, desktop notifications, launcher, desktop menu, or
 960       whatever else it wants.
 961     </description>
 962     <enum name="error">
 963       <entry name="node_exists" value="0" summary="shell surface already has a node object"/>
 964       <entry name="no_commit" value="1" summary="failed to commit the surface before the window manager commit"/>
 965     </enum>
 966     <request name="destroy" type="destructor">
 967       <description summary="destroy the shell surface object">
 968         This request indicates that the client will no longer use the shell
 969         surface object and that it may be safely destroyed.
 970       </description>
 971     </request>
 972     <request name="get_node">
 973       <description summary="get the shell surface's render list node">
 974         Get the node in the render list corresponding to the shell surface.
 975         It is a protocol error to make this request more than once for a single
 976         shell surface.
 977       </description>
 978       <arg name="id" type="new_id" interface="zcce_node_v1" summary="new node"/>
 979     </request>
 980     <request name="sync_next_commit">
 981       <description summary="sync next surface commit to window manager commit">
 982         Synchronize application of the next wl_surface.commit request on the
 983         shell surface with rest of the rendering state atomically applied with
 984         the next cce_window_manager_v1.render_finish request.
 985         The client must make a wl_surface.commit request on the shell surface
 986         after this request and before the render_finish request, failure to do
 987         so is a protocol error.
 988         This request modifies rendering state and may only be made as part of a
 989         render sequence, see the cce_window_manager_v1 description.
 990       </description>
 991     </request>
 992   </interface>
 993   <interface name="zcce_node_v1" version="4">
 994     <description summary="a node in the render list">
 995       The render list is a list of nodes that determines the rendering order of
 996       the compositor. Nodes may correspond to windows or shell surfaces. The
 997       relative ordering of nodes may be changed with the place_above and
 998       place_below requests, changing the rendering order.
 999       The initial position of a node in the render list is undefined, the window
1000       manager client must use the place_above or place_below request to
1001       guarantee a specific rendering order.
1002     </description>
1003     <request name="destroy" type="destructor">
1004       <description summary="destroy the decoration object">
1005         This request indicates that the client will no longer use the node
1006         object and that it may be safely destroyed.
1007       </description>
1008     </request>
1009     <request name="set_position">
1010       <description summary="set absolute position of the node">
1011         Set the absolute position of the node in the compositor's logical
1012         coordinate space. The x and y coordinates may be positive or negative.
1013         Note that the position of a cce_window_v1 refers to the position of
1014         the window content and is unaffected by the presence of borders or
1015         decoration surfaces.
1016         If this request is never sent, the position of the node is undefined by
1017         this protocol and left up to the compositor.
1018         This request modifies rendering state and may only be made as part of a
1019         render sequence, see the cce_window_manager_v1 description.
1020       </description>
1021       <arg name="x" type="int" summary="global x coordinate"/>
1022       <arg name="y" type="int" summary="global y coordinate"/>
1023     </request>
1024     <request name="place_top">
1025       <description summary="place node above all other nodes">
1026         This request places the node above all other nodes in the compositor's
1027         render list.
1028         This request modifies rendering state and may only be made as part of a
1029         render sequence, see the cce_window_manager_v1 description.
1030       </description>
1031     </request>
1032     <request name="place_bottom">
1033       <description summary="place node below all other nodes">
1034         This request places the node below all other nodes in the compositor's
1035         render list.
1036         This request modifies rendering state and may only be made as part of a
1037         render sequence, see the cce_window_manager_v1 description.
1038       </description>
1039     </request>
1040     <request name="place_above">
1041       <description summary="place node above another node">
1042         This request places the node directly above another node in the
1043         compositor's render list.
1044         Attempting to place a node above itself has no effect.
1045         This request modifies rendering state and may only be made as part of a
1046         render sequence, see the cce_window_manager_v1 description.
1047       </description>
1048       <arg name="other" type="object" interface="zcce_node_v1" summary="other node"/>
1049     </request>
1050     <request name="place_below">
1051       <description summary="place node below another node">
1052         This request places the node directly below another node in the
1053         compositor's render list.
1054         Attempting to place a node below itself has no effect.
1055         This request modifies rendering state and may only be made as part of a
1056         render sequence, see the cce_window_manager_v1 description.
1057       </description>
1058       <arg name="other" type="object" interface="zcce_node_v1" summary="other node"/>
1059     </request>
1060   </interface>
1061   <interface name="zcce_output_v1" version="4">
1062     <description summary="a logical output">
1063       An area in the compositor's logical coordinate space that should be
1064       treated as a single output for window management purposes. This area may
1065       correspond to a single physical output or multiple physical outputs in the
1066       case of mirroring or tiled monitors depending on the hardware and
1067       compositor configuration.
1068     </description>
1069     <request name="destroy" type="destructor">
1070       <description summary="destroy the output object">
1071         This request indicates that the client will no longer use the output
1072         object and that it may be safely destroyed.
1073         This request should be made after the cce_output_v1.removed event is
1074         received to complete destruction of the output.
1075       </description>
1076     </request>
1077     <event name="removed">
1078       <description summary="the output is removed">
1079         This event indicates that the logical output is no longer conceptually
1080         part of window management space.
1081         The server will send no further events on this object and ignore any
1082         request (other than cce_output_v1.destroy) made after this event is
1083         sent. The client should destroy this object with the
1084         cce_output_v1.destroy request to free up resources.
1085         This event may be sent because a corresponding physical output has been
1086         physically unplugged or because some output configuration has changed.
1087         This event will be followed by a manage_start event after all other new
1088         state has been sent by the server.
1089       </description>
1090     </event>
1091     <event name="wl_output">
1092       <description summary="corresponding wl_output">
1093         The wl_output object corresponding to the cce_output_v1. The argument
1094         is the global name of the wl_output advertised with wl_registry.global.
1095         It is guaranteed that the corresponding wl_output is advertised before
1096         this event is sent.
1097         This event is sent exactly once. The wl_output associated with a
1098         cce_output_v1 cannot change. It is guaranteed that there is a 1-to-1
1099         mapping between wl_output and cce_output_v1 objects.
1100         The global_remove event for the corresponding wl_output may be sent
1101         before the cce_output_v1.removed event. This is due to the fact that
1102         cce_output_v1 state changes are synced to the cce window management
1103         manage sequence while changes to globals are not.
1104         Rationale: The window manager may need information provided by the
1105         wl_output interface such as the name/description. It also may need the
1106         wl_output object to start screencopy for example.
1107       </description>
1108       <arg name="name" type="uint" summary="name of the wl_output global"/>
1109     </event>
1110     <event name="position">
1111       <description summary="output position">
1112         This event indicates the position of the output in the compositor's
1113         logical coordinate space. The x and y coordinates may be positive or
1114         negative.
1115         This event is sent once when the cce_output_v1 is created and again
1116         whenever the position changes.
1117         This event will be followed by a manage_start event after all other new
1118         state has been sent by the server.
1119         The server must guarantee that the position and dimensions events do not
1120         cause the areas of multiple logical outputs to overlap when the
1121         corresponding manage_start event is received.
1122       </description>
1123       <arg name="x" type="int" summary="global x coordinate"/>
1124       <arg name="y" type="int" summary="global y coordinate"/>
1125     </event>
1126     <event name="dimensions">
1127       <description summary="output dimensions">
1128         This event indicates the dimensions of the output in the compositor's
1129         logical coordinate space. The width and height will always be strictly
1130         greater than zero.
1131         This event is sent once when the cce_output_v1 is created and again
1132         whenever the dimensions change.
1133         This event will be followed by a manage_start event after all other new
1134         state has been sent by the server.
1135         The server must guarantee that the position and dimensions events do not
1136         cause the areas of multiple logical outputs to overlap when the
1137         corresponding manage_start event is received.
1138       </description>
1139       <arg name="width" type="int" summary="output width"/>
1140       <arg name="height" type="int" summary="output height"/>
1141     </event>
1142     <enum name="error" since="4">
1143       <entry name="invalid_presentation_mode" value="0" since="4" summary="invalid presentation mode enum value"/>
1144     </enum>
1145     <enum name="presentation_mode" since="4">
1146       <entry name="vsync" value="0">
1147         <description summary="tearing-free presentation">
1148           Output page-flips should be synchronized to the vertical blanking
1149           period, eliminating tearing. This is the default presentation mode.
1150         </description>
1151       </entry>
1152       <entry name="async" value="1">
1153         <description summary="asynchronous presentation">
1154           Output page-flips should not be synchronized to the vertical blanking
1155           period, visual screen tearing may occur.
1156         </description>
1157       </entry>
1158     </enum>
1159     <request name="set_presentation_mode" since="4">
1160       <description summary="set the preferred presentation mode">
1161         Set the preferred presentation mode of the output. The compositor should
1162         always respect the preference of the window manager if possible. If this
1163         request is never made, the preferred presentation mode is vsync.
1164         This request modifies rendering state and may only be made as part of a
1165         render sequence, see the cce_window_manager_v1 description.
1166       </description>
1167       <arg name="mode" type="uint" enum="presentation_mode" summary="preferred presentation mode"/>
1168     </request>
1169   </interface>
1170   <interface name="zcce_seat_v1" version="4">
1171     <description summary="a window management seat">
1172       This object represents a single user's collection of input devices. It
1173       allows the window manager to route keyboard input to windows, get
1174       high-level information about pointer input, define pointer bindings, etc.
1175       For keyboard bindings, see the cce-xkb-bindings-v1 protocol.
1176       Since version 4: The cursor surface/shape set by the window manager on the
1177       wl_pointer of this seat is used when no client has pointer focus, for
1178       example during a pointer operation. Since the window manager is allowed to
1179       set cursor surface/shape even when it does not have pointer focus, the
1180       compositor must ignore the serial argument of wl_pointer.set_cursor and
1181       wp_cursor_shape_device_v1.set_shape requests made by the window manager.
1182       The most recent cursor surface/shape set by the window manager is
1183       remembered by the compositor and restored whenever no client has pointer
1184       focus. If the window manager never sets a cursor surface/shape, the
1185       "default" shape is used.
1186     </description>
1187     <request name="destroy" type="destructor">
1188       <description summary="destroy the seat object">
1189         This request indicates that the client will no longer use the seat
1190         object and that it may be safely destroyed.
1191         This request should be made after the cce_seat_v1.removed event is
1192         received to complete destruction of the seat.
1193       </description>
1194     </request>
1195     <event name="removed">
1196       <description summary="the seat is removed">
1197         This event indicates that seat is no longer in use and should be
1198         destroyed.
1199         The server will send no further events on this object and ignore any
1200         request (other than cce_seat_v1.destroy) made after this event is
1201         sent.  The client should destroy this object with the
1202         cce_seat_v1.destroy request to free up resources.
1203         This event will be followed by a manage_start event after all other new
1204         state has been sent by the server.
1205       </description>
1206     </event>
1207     <event name="wl_seat">
1208       <description summary="corresponding wl_seat">
1209         The wl_seat object corresponding to the cce_seat_v1. The argument is
1210         the global name of the wl_seat advertised with wl_registry.global.
1211         It is guaranteed that the corresponding wl_seat is advertised before
1212         this event is sent.
1213         This event is sent exactly once. The wl_seat associated with a
1214         cce_seat_v1 cannot change. It is guaranteed that there is a 1-to-1
1215         mapping between wl_seat and cce_seat_v1 objects.
1216         The global_remove event for the corresponding wl_seat may be sent before
1217         the cce_seat_v1.removed event. This is due to the fact that
1218         cce_seat_v1 state changes are synced to the cce window management
1219         manage sequence while changes to globals are not.
1220         Rationale: The window manager may want to trigger window management
1221         state changes based on normal input events received by its shell
1222         surfaces for example.
1223       </description>
1224       <arg name="name" type="uint" summary="name of the wl_seat global"/>
1225     </event>
1226     <request name="focus_window">
1227       <description summary="give keyboard focus to a window">
1228         Request that the compositor send keyboard input to the given window.
1229         This request modifies window management state and may only be made as
1230         part of a manage sequence, see the cce_window_manager_v1 description.
1231       </description>
1232       <arg name="window" type="object" interface="zcce_window_v1" summary="window to focus"/>
1233     </request>
1234     <request name="focus_shell_surface">
1235       <description summary="give keyboard focus to a shell_surface">
1236         Request that the compositor send keyboard input to the given shell
1237         surface.
1238         This request modifies window management state and may only be made as
1239         part of a manage sequence, see the cce_window_manager_v1 description.
1240       </description>
1241       <arg name="shell_surface" type="object" interface="zcce_shell_surface_v1" summary="shell surface to focus"/>
1242     </request>
1243     <request name="clear_focus">
1244       <description summary="clear keyboard focus">
1245         Request that the compositor not send keyboard input to any client.
1246         This request modifies window management state and may only be made as
1247         part of a manage sequence, see the cce_window_manager_v1 description.
1248       </description>
1249     </request>
1250     <event name="pointer_enter">
1251       <description summary="pointer entered a window">
1252         The seat's pointer entered the given window's area.
1253         The area of a window is defined to include the area defined by the
1254         window dimensions, borders configured using cce_window_v1.set_borders,
1255         and the input regions of decoration surfaces. In particular, it does not
1256         include input regions of surfaces belonging to the window that extend
1257         outside the window dimensions.
1258         The pointer of a seat may only enter a single window at a time. When the
1259         pointer moves between windows, the pointer_leave event for the old
1260         window must be sent before the pointer_enter event for the new window.
1261         This event will be followed by a manage_start event after all other new
1262         state has been sent by the server.
1263       </description>
1264       <arg name="window" type="object" interface="zcce_window_v1" summary="window entered"/>
1265     </event>
1266     <event name="pointer_leave">
1267       <description summary="pointer left the entered window">
1268         The seat's pointer left the window for which pointer_enter was most
1269         recently sent. See pointer_enter for details.
1270         This event will be followed by a manage_start event after all other new
1271         state has been sent by the server.
1272       </description>
1273     </event>
1274     <event name="window_interaction">
1275       <description summary="a window has been interacted with">
1276         A window has been interacted with beyond the pointer merely passing over
1277         it. This event might be sent due to a pointer button press or due to a
1278         touch/tablet tool interaction with the window.
1279         There are no guarantees regarding how this event is sent in relation to
1280         the pointer_enter and pointer_leave events as the interaction may use
1281         touch or tablet tool input.
1282         Rationale: this event gives window managers necessary information to
1283         determine when to send keyboard focus, raise a window that already has
1284         keyboard focus, etc. Rather than expose all pointer, touch, and tablet
1285         events to window managers, a policy over mechanism approach is taken.
1286         This event will be followed by a manage_start event after all other new
1287         state has been sent by the server.
1288       </description>
1289       <arg name="window" type="object" interface="zcce_window_v1" summary="window interacted with"/>
1290     </event>
1291     <event name="shell_surface_interaction">
1292       <description summary="a shell surface has been interacted with">
1293         A shell surface has been interacted with beyond the pointer merely
1294         passing over it. This event might be sent due to a pointer button press
1295         or due to a touch/tablet tool interaction with the shell_surface.
1296         There are no guarantees regarding how this event is sent in relation to
1297         the pointer_enter and pointer_leave events as the interaction may use
1298         touch or tablet tool input.
1299         Rationale: While the shell surface does receive all wl_pointer,
1300         wl_touch, etc. input events for the surface directly, these events do
1301         not necessarily trigger a manage sequence and therefore do not allow the
1302         window manager to update focus or perform other actions in response to
1303         the input in a race-free way.
1304         This event will be followed by a manage_start event after all other new
1305         state has been sent by the server.
1306       </description>
1307       <arg name="shell_surface" type="object" interface="zcce_shell_surface_v1" summary="shell surface interacted with"/>
1308     </event>
1309     <request name="op_start_pointer">
1310       <description summary="start an interactive pointer operation">
1311         Start an interactive pointer operation. During the operation, op_delta
1312         events will be sent based on pointer input.
1313         When all pointer buttons are released, the op_release event is sent.
1314         The pointer operation continues until the op_end request is made during
1315         a manage sequence and that manage sequence is finished.
1316         The window manager may use this operation to implement interactive
1317         move/resize of windows by setting the position of windows and proposing
1318         dimensions based off of the op_delta events.
1319         This request is ignored if an operation is already in progress.
1320         The compositor must ensure that no client has pointer focus from this
1321         seat during the pointer operation. This means that the window manager
1322         has control over the pointer's cursor surface/shape during the pointer
1323         operation. See the cce_seat_v1 description.
1324         This request modifies window management state and may only be made as
1325         part of a manage sequence, see the cce_window_manager_v1 description.
1326       </description>
1327     </request>
1328     <event name="op_delta">
1329       <description summary="total cumulative motion since op start">
1330         This event indicates the total change in position since the start of the
1331         operation of the pointer/touch point/etc.
1332         This event will be followed by a manage_start event after all other new
1333         state has been sent by the server.
1334       </description>
1335       <arg name="dx" type="int" summary="total change in x"/>
1336       <arg name="dy" type="int" summary="total change in y"/>
1337     </event>
1338     <event name="op_release">
1339       <description summary="operation input has been released">
1340         The input driving the current interactive operation has been released.
1341         For a pointer op for example, all pointer buttons have been released.
1342         Depending on the op type, op_delta events may continue to be sent until
1343         the op is ended with the op_end request.
1344         This event is sent at most once during an interactive operation.
1345         This event will be followed by a manage_start event after all other new
1346         state has been sent by the server.
1347       </description>
1348     </event>
1349     <request name="op_end">
1350       <description summary="end an interactive operation">
1351         End an interactive operation.
1352         This request is ignored if there is no operation in progress.
1353         This request modifies window management state and may only be made as
1354         part of a manage sequence, see the cce_window_manager_v1 description.
1355       </description>
1356     </request>
1357     <enum name="modifiers" bitfield="true">
1358       <description summary="a set of keyboard modifiers">
1359         This enum is used to describe the keyboard modifiers that must be held
1360         down to trigger a key binding or pointer binding.
1361         Note that cce and wlroots use the values 2 and 16 for capslock and
1362         numlock internally. It doesn't make sense to use locked modifiers for
1363         bindings however so these values are not included in this enum.
1364       </description>
1365       <entry name="none" value="0"/>
1366       <entry name="shift" value="1"/>
1367       <entry name="ctrl" value="4"/>
1368       <entry name="mod1" value="8" summary="commonly called alt"/>
1369       <entry name="mod3" value="32"/>
1370       <entry name="mod4" value="64" summary="commonly called super or logo"/>
1371       <entry name="mod5" value="128"/>
1372     </enum>
1373     <request name="get_pointer_binding">
1374       <description summary="define a new pointer binding">
1375         Define a pointer binding in terms of a pointer button, keyboard
1376         modifiers, and other configurable properties.
1377         The button argument is a Linux input event code defined in the
1378         linux/input-event-codes.h header file (e.g. BTN_RIGHT).
1379         The new pointer binding is not enabled until initial configuration is
1380         completed and the enable request is made during a manage sequence.
1381       </description>
1382       <arg name="id" type="new_id" interface="zcce_pointer_binding_v1" summary="new pointer binding"/>
1383       <arg name="button" type="uint" summary="a Linux input event code"/>
1384       <arg name="modifiers" type="uint" enum="modifiers" summary="keyboard modifiers"/>
1385     </request>
1386     <request name="set_xcursor_theme" since="2">
1387       <description summary="set the xcursor theme for the seat">
1388         Set the XCursor theme for the seat. This theme is used for cursors
1389         rendered by the compositor, but not necessarily for cursors rendered by
1390         clients.
1391         Note: The window manager may also wish to set the XCURSOR_THEME and
1392         XCURSOR_SIZE environment variable for programs it starts.
1393       </description>
1394       <arg name="name" type="string" summary="xcursor theme name"/>
1395       <arg name="size" type="uint" summary="cursor size"/>
1396     </request>
1397     <event name="pointer_position" since="2">
1398       <description summary="The current position of the pointer">
1399         The current position of the pointer in the compositor's logical
1400         coordinate space.
1401         This state is special in that a change in pointer position alone must
1402         not cause the compositor to start a manage sequence.
1403         Assuming the seat has a pointer, this event must be sent in every manage
1404         sequence unless there is no change in x/y position since the last time this
1405         event was sent.
1406       </description>
1407       <arg name="x" type="int" summary="global x coordinate"/>
1408       <arg name="y" type="int" summary="global y coordinate"/>
1409     </event>
1410     <request name="pointer_warp" since="3">
1411       <description summary="warp the pointer to a given position">
1412         Warp the pointer to the given position in the compositor's logical
1413         coordinate space.
1414         If the given position is outside the bounds of all outputs, the pointer
1415         will be warped to the closest point inside an output instead.
1416         This request modifies window management state and may only be made as
1417         part of a manage sequence, see the cce_window_manager_v1 description.
1418       </description>
1419       <arg name="x" type="int" summary="global x coordinate"/>
1420       <arg name="y" type="int" summary="global y coordinate"/>
1421     </request>
1422   </interface>
1423   <interface name="zcce_pointer_binding_v1" version="4">
1424     <description summary="configure a pointer binding, receive trigger events">
1425       This object allows the window manager to configure a pointer binding and
1426       receive events when the binding is triggered.
1427       The new pointer binding is not enabled until the enable request is made
1428       during a manage sequence.
1429       Normally, all pointer button events are sent to the surface with pointer
1430       focus by the compositor. Pointer button events that trigger a pointer
1431       binding are not sent to the surface with pointer focus.
1432       If multiple pointer bindings would be triggered by a single physical
1433       pointer event on the compositor side, it is compositor policy which
1434       pointer binding(s) will receive press/release events or if all of the
1435       matched pointer bindings receive press/release events.
1436     </description>
1437     <request name="destroy" type="destructor">
1438       <description summary="destroy the pointer binding object">
1439         This request indicates that the client will no longer use the pointer
1440         binding object and that it may be safely destroyed.
1441       </description>
1442     </request>
1443     <request name="enable">
1444       <description summary="enable the pointer binding">
1445         This request should be made after all initial configuration has been
1446         completed and the window manager wishes the pointer binding to be able
1447         to be triggered.
1448         This request modifies window management state and may only be made as
1449         part of a manage sequence, see the cce_window_manager_v1 description.
1450       </description>
1451     </request>
1452     <request name="disable">
1453       <description summary="disable the pointer binding">
1454         This request may be used to temporarily disable the pointer binding. It
1455         may be later re-enabled with the enable request.
1456         This request modifies window management state and may only be made as
1457         part of a manage sequence, see the cce_window_manager_v1 description.
1458       </description>
1459     </request>
1460     <event name="pressed">
1461       <description summary="the bound pointer button has been pressed">
1462         This event indicates that the pointer button triggering the binding has
1463         been pressed.
1464         This event will be followed by a manage_start event after all other new
1465         state has been sent by the server.
1466         The compositor should wait for the manage sequence to complete before
1467         processing further input events. This allows the window manager client
1468         to, for example, modify key bindings and keyboard focus without racing
1469         against future input events. The window manager should of course respond
1470         as soon as possible as the capacity of the compositor to buffer incoming
1471         input events is finite.
1472       </description>
1473     </event>
1474     <event name="released">
1475       <description summary="the bound pointer button has been released">
1476         This event indicates that the pointer button triggering the binding has
1477         been released.
1478         Releasing the modifiers for the binding without releasing the pointer
1479         button does not trigger the release event. This event is sent when the
1480         pointer button is released, even if the modifiers have changed since the
1481         pressed event.
1482         This event will be followed by a manage_start event after all other new
1483         state has been sent by the server.
1484         The compositor should wait for the manage sequence to complete before
1485         processing further input events. This allows the window manager client
1486         to, for example, modify key bindings and keyboard focus without racing
1487         against future input events. The window manager should of course respond
1488         as soon as possible as the capacity of the compositor to buffer incoming
1489         input events is finite.
1490       </description>
1491     </event>
1492   </interface>
1493   <interface name="zcce_toplevel_v1" version="5">
1494     <description summary="toplevel window management controls">
1495       An interface to control and listen to CCE-specific window management states
1496       for a client surface.
1497     </description>
1498     <request name="destroy" type="destructor">
1499       <description summary="destroy the cce toplevel object"/>
1500     </request>
1501     <request name="set_floating">
1502       <description summary="request floating mode">
1503         Explicitly request the compositor to place the window in floating mode.
1504       </description>
1505     </request>
1506     <request name="unset_floating">
1507       <description summary="unset floating mode">
1508         Request the compositor to return the window to normal tiling mode.
1509       </description>
1510     </request>
1511     <request name="set_maximized">
1512       <description summary="request maximized state"/>
1513     </request>
1514     <request name="unset_maximized">
1515       <description summary="unset maximized state"/>
1516     </request>
1517     <request name="set_fullscreen">
1518       <description summary="request fullscreen state"/>
1519     </request>
1520     <request name="unset_fullscreen">
1521       <description summary="unset fullscreen state"/>
1522     </request>
1523     <request name="set_minimized">
1524       <description summary="request minimized state"/>
1525     </request>
1526     <request name="set_popup" since="2">
1527       <description summary="request popup mode">
1528         Explicitly request the compositor to place the window in popup mode.
1529       </description>
1530     </request>
1531     <request name="unset_popup" since="2">
1532       <description summary="unset popup mode">
1533         Request the compositor to return the window to normal tiling mode.
1534       </description>
1535     </request>
1536     <request name="set_utility" since="3">
1537       <description summary="request utility mode">
1538         Declare the window a utility window: a tool whose shape is decided by
1539         its contents. The compositor stops dictating a size to it (every
1540         configure carries the "you choose" 0x0), offers no resize affordance,
1541         and never saves geometry for it. The window still floats and moves
1542         like an ordinary window. The declaration is explicit by design — the
1543         compositor never infers utility mode from size hints.
1544       </description>
1545     </request>
1546     <request name="unset_utility" since="3">
1547       <description summary="unset utility mode">
1548         Request the compositor to return the window to normal tiling mode.
1549       </description>
1550     </request>
1551     <request name="set_grid" since="4">
1552       <description summary="declare the desktop-grid surface">
1553         Declare this surface the desktop-grid layer. The compositor anchors
1554         the surface to the virtual desktop: it is positioned and scaled with
1555         the camera every frame, exactly like window content, so the client is
1556         never part of the pan/zoom loop. The surface becomes
1557         input-transparent, is stacked above the wallpaper and below all
1558         windows, is excluded from focus, session save and the overview, and
1559         the compositor stops dictating sizes to it.
1560 
1561         The compositor tells the client WHAT to render via grid_patch
1562         events; the surface stays unmapped-invisible until the first
1563         acknowledged patch is committed.
1564       </description>
1565     </request>
1566     <request name="ack_grid_patch" since="4">
1567       <description summary="acknowledge a grid patch">
1568         Acknowledge a grid_patch event. The next buffer the client commits
1569         after this request is taken to be rendered for the acknowledged
1570         patch: the compositor latches that patch's anchor rectangle at that
1571         commit, so an in-flight older buffer is never shown at a new
1572         anchor.
1573       </description>
1574       <arg name="serial" type="uint" summary="the serial from the grid_patch event"/>
1575     </request>
1576     <event name="floating_state">
1577       <description summary="floating status event">
1578         Sent by the compositor to inform the client of its current floating status.
1579       </description>
1580       <arg name="state" type="uint" summary="1 if floating, 0 otherwise"/>
1581     </event>
1582     <request name="set_popover_region" since="5">
1583       <description summary="hint where an in-surface popover is drawn">
1584         Tell the compositor that the client is drawing a popover (menu,
1585         dropdown, context menu) into its own surface at this rect, in
1586         surface-local logical coordinates. The compositor keeps its
1587         window chrome — the overview resize ring — from drawing over
1588         that rect, so the menu reads as being in front of it. With more
1589         than one popover open, send the union. A zero width or height
1590         clears the hint; closing the last popover must send that clear,
1591         or the chrome stays cut where the menu used to be.
1592 
1593         This is a rendering hint only: it moves no window, changes no
1594         input routing, and carries no promise the compositor draws
1595         anything differently at all.
1596       </description>
1597       <arg name="x" type="int"/>
1598       <arg name="y" type="int"/>
1599       <arg name="width" type="int"/>
1600       <arg name="height" type="int"/>
1601     </request>
1602 
1603     <event name="grid_patch" since="4">
1604       <description summary="render this patch of the desktop grid">
1605         Instructs the grid client what region of the virtual desktop to
1606         render, and at what resolution. x/y/width/height are virtual-surface
1607         coordinates; scale is buffer pixels per virtual unit, so the
1608         expected buffer size is (width * scale) x (height * scale). The
1609         client renders the region, sends ack_grid_patch with the serial, and
1610         commits the new buffer.
1611 
1612         A newer grid_patch supersedes an unacknowledged older one; the
1613         client should render only the latest.
1614       </description>
1615       <arg name="serial" type="uint" summary="serial to pass to ack_grid_patch"/>
1616       <arg name="x" type="fixed" summary="patch origin x, virtual units"/>
1617       <arg name="y" type="fixed" summary="patch origin y, virtual units"/>
1618       <arg name="width" type="fixed" summary="patch width, virtual units"/>
1619       <arg name="height" type="fixed" summary="patch height, virtual units"/>
1620       <arg name="scale" type="fixed" summary="buffer px per virtual unit"/>
1621     </event>
1622   </interface>
1623 </protocol>