| 
 | 1 | +<?xml version="1.0" encoding="UTF-8"?>  | 
 | 2 | +<protocol name="cursor_shape_v1">  | 
 | 3 | +  <copyright>  | 
 | 4 | +    Copyright 2018 The Chromium Authors  | 
 | 5 | +    Copyright 2023 Simon Ser  | 
 | 6 | + | 
 | 7 | +    Permission is hereby granted, free of charge, to any person obtaining a  | 
 | 8 | +    copy of this software and associated documentation files (the "Software"),  | 
 | 9 | +    to deal in the Software without restriction, including without limitation  | 
 | 10 | +    the rights to use, copy, modify, merge, publish, distribute, sublicense,  | 
 | 11 | +    and/or sell copies of the Software, and to permit persons to whom the  | 
 | 12 | +    Software is furnished to do so, subject to the following conditions:  | 
 | 13 | +    The above copyright notice and this permission notice (including the next  | 
 | 14 | +    paragraph) shall be included in all copies or substantial portions of the  | 
 | 15 | +    Software.  | 
 | 16 | +    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  | 
 | 17 | +    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  | 
 | 18 | +    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL  | 
 | 19 | +    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  | 
 | 20 | +    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  | 
 | 21 | +    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  | 
 | 22 | +    DEALINGS IN THE SOFTWARE.  | 
 | 23 | +  </copyright>  | 
 | 24 | + | 
 | 25 | +  <interface name="wp_cursor_shape_manager_v1" version="2">  | 
 | 26 | +    <description summary="cursor shape manager">  | 
 | 27 | +      This global offers an alternative, optional way to set cursor images. This  | 
 | 28 | +      new way uses enumerated cursors instead of a wl_surface like  | 
 | 29 | +      wl_pointer.set_cursor does.  | 
 | 30 | + | 
 | 31 | +      Warning! The protocol described in this file is currently in the testing  | 
 | 32 | +      phase. Backward compatible changes may be added together with the  | 
 | 33 | +      corresponding interface version bump. Backward incompatible changes can  | 
 | 34 | +      only be done by creating a new major version of the extension.  | 
 | 35 | +    </description>  | 
 | 36 | + | 
 | 37 | +    <request name="destroy" type="destructor">  | 
 | 38 | +      <description summary="destroy the manager">  | 
 | 39 | +        Destroy the cursor shape manager.  | 
 | 40 | +      </description>  | 
 | 41 | +    </request>  | 
 | 42 | + | 
 | 43 | +    <request name="get_pointer">  | 
 | 44 | +      <description summary="manage the cursor shape of a pointer device">  | 
 | 45 | +        Obtain a wp_cursor_shape_device_v1 for a wl_pointer object.  | 
 | 46 | + | 
 | 47 | +        When the pointer capability is removed from the wl_seat, the  | 
 | 48 | +        wp_cursor_shape_device_v1 object becomes inert.  | 
 | 49 | +      </description>  | 
 | 50 | +      <arg name="cursor_shape_device" type="new_id" interface="wp_cursor_shape_device_v1"/>  | 
 | 51 | +      <arg name="pointer" type="object" interface="wl_pointer"/>  | 
 | 52 | +    </request>  | 
 | 53 | + | 
 | 54 | +    <request name="get_tablet_tool_v2">  | 
 | 55 | +      <description summary="manage the cursor shape of a tablet tool device">  | 
 | 56 | +        Obtain a wp_cursor_shape_device_v1 for a zwp_tablet_tool_v2 object.  | 
 | 57 | + | 
 | 58 | +        When the zwp_tablet_tool_v2 is removed, the wp_cursor_shape_device_v1  | 
 | 59 | +        object becomes inert.  | 
 | 60 | +      </description>  | 
 | 61 | +      <arg name="cursor_shape_device" type="new_id" interface="wp_cursor_shape_device_v1"/>  | 
 | 62 | +      <arg name="tablet_tool" type="object" interface="zwp_tablet_tool_v2"/>  | 
 | 63 | +    </request>  | 
 | 64 | +  </interface>  | 
 | 65 | + | 
 | 66 | +  <interface name="wp_cursor_shape_device_v1" version="2">  | 
 | 67 | +    <description summary="cursor shape for a device">  | 
 | 68 | +      This interface allows clients to set the cursor shape.  | 
 | 69 | +    </description>  | 
 | 70 | + | 
 | 71 | +    <enum name="shape">  | 
 | 72 | +      <description summary="cursor shapes">  | 
 | 73 | +        This enum describes cursor shapes.  | 
 | 74 | + | 
 | 75 | +        The names are taken from the CSS W3C specification:  | 
 | 76 | +        https://w3c.github.io/csswg-drafts/css-ui/#cursor  | 
 | 77 | +        with a few additions.  | 
 | 78 | + | 
 | 79 | +        Note that there are some groups of cursor shapes that are related:  | 
 | 80 | +        The first group is drag-and-drop cursors which are used to indicate  | 
 | 81 | +        the selected action during dnd operations. The second group is resize  | 
 | 82 | +        cursors which are used to indicate resizing and moving possibilities  | 
 | 83 | +        on window borders. It is recommended that the shapes in these groups  | 
 | 84 | +        should use visually compatible images and metaphors.  | 
 | 85 | +      </description>  | 
 | 86 | +      <entry name="default" value="1" summary="default cursor"/>  | 
 | 87 | +      <entry name="context_menu" value="2" summary="a context menu is available for the object under the cursor"/>  | 
 | 88 | +      <entry name="help" value="3" summary="help is available for the object under the cursor"/>  | 
 | 89 | +      <entry name="pointer" value="4" summary="pointer that indicates a link or another interactive element"/>  | 
 | 90 | +      <entry name="progress" value="5" summary="progress indicator"/>  | 
 | 91 | +      <entry name="wait" value="6" summary="program is busy, user should wait"/>  | 
 | 92 | +      <entry name="cell" value="7" summary="a cell or set of cells may be selected"/>  | 
 | 93 | +      <entry name="crosshair" value="8" summary="simple crosshair"/>  | 
 | 94 | +      <entry name="text" value="9" summary="text may be selected"/>  | 
 | 95 | +      <entry name="vertical_text" value="10" summary="vertical text may be selected"/>  | 
 | 96 | +      <entry name="alias" value="11" summary="drag-and-drop: alias of/shortcut to something is to be created"/>  | 
 | 97 | +      <entry name="copy" value="12" summary="drag-and-drop: something is to be copied"/>  | 
 | 98 | +      <entry name="move" value="13" summary="drag-and-drop: something is to be moved"/>  | 
 | 99 | +      <entry name="no_drop" value="14" summary="drag-and-drop: the dragged item cannot be dropped at the current cursor location"/>  | 
 | 100 | +      <entry name="not_allowed" value="15" summary="drag-and-drop: the requested action will not be carried out"/>  | 
 | 101 | +      <entry name="grab" value="16" summary="drag-and-drop: something can be grabbed"/>  | 
 | 102 | +      <entry name="grabbing" value="17" summary="drag-and-drop: something is being grabbed"/>  | 
 | 103 | +      <entry name="e_resize" value="18" summary="resizing: the east border is to be moved"/>  | 
 | 104 | +      <entry name="n_resize" value="19" summary="resizing: the north border is to be moved"/>  | 
 | 105 | +      <entry name="ne_resize" value="20" summary="resizing: the north-east corner is to be moved"/>  | 
 | 106 | +      <entry name="nw_resize" value="21" summary="resizing: the north-west corner is to be moved"/>  | 
 | 107 | +      <entry name="s_resize" value="22" summary="resizing: the south border is to be moved"/>  | 
 | 108 | +      <entry name="se_resize" value="23" summary="resizing: the south-east corner is to be moved"/>  | 
 | 109 | +      <entry name="sw_resize" value="24" summary="resizing: the south-west corner is to be moved"/>  | 
 | 110 | +      <entry name="w_resize" value="25" summary="resizing: the west border is to be moved"/>  | 
 | 111 | +      <entry name="ew_resize" value="26" summary="resizing: the east and west borders are to be moved"/>  | 
 | 112 | +      <entry name="ns_resize" value="27" summary="resizing: the north and south borders are to be moved"/>  | 
 | 113 | +      <entry name="nesw_resize" value="28" summary="resizing: the north-east and south-west corners are to be moved"/>  | 
 | 114 | +      <entry name="nwse_resize" value="29" summary="resizing: the north-west and south-east corners are to be moved"/>  | 
 | 115 | +      <entry name="col_resize" value="30" summary="resizing: that the item/column can be resized horizontally"/>  | 
 | 116 | +      <entry name="row_resize" value="31" summary="resizing: that the item/row can be resized vertically"/>  | 
 | 117 | +      <entry name="all_scroll" value="32" summary="something can be scrolled in any direction"/>  | 
 | 118 | +      <entry name="zoom_in" value="33" summary="something can be zoomed in"/>  | 
 | 119 | +      <entry name="zoom_out" value="34" summary="something can be zoomed out"/>  | 
 | 120 | +      <entry name="dnd_ask" value="35" summary="drag-and-drop: the user will select which action will be carried out (non-css value)" since="2"/>  | 
 | 121 | +      <entry name="all_resize" value="36" summary="resizing: something can be moved or resized in any direction (non-css value)" since="2"/>  | 
 | 122 | +    </enum>  | 
 | 123 | + | 
 | 124 | +    <enum name="error">  | 
 | 125 | +      <entry name="invalid_shape" value="1"  | 
 | 126 | +        summary="the specified shape value is invalid"/>  | 
 | 127 | +    </enum>  | 
 | 128 | + | 
 | 129 | +    <request name="destroy" type="destructor">  | 
 | 130 | +      <description summary="destroy the cursor shape device">  | 
 | 131 | +        Destroy the cursor shape device.  | 
 | 132 | + | 
 | 133 | +        The device cursor shape remains unchanged.  | 
 | 134 | +      </description>  | 
 | 135 | +    </request>  | 
 | 136 | + | 
 | 137 | +    <request name="set_shape">  | 
 | 138 | +      <description summary="set device cursor to the shape">  | 
 | 139 | +        Sets the device cursor to the specified shape. The compositor will  | 
 | 140 | +        change the cursor image based on the specified shape.  | 
 | 141 | + | 
 | 142 | +        The cursor actually changes only if the input device focus is one of  | 
 | 143 | +        the requesting client's surfaces. If any, the previous cursor image  | 
 | 144 | +        (surface or shape) is replaced.  | 
 | 145 | + | 
 | 146 | +        The "shape" argument must be a valid enum entry, otherwise the  | 
 | 147 | +        invalid_shape protocol error is raised.  | 
 | 148 | + | 
 | 149 | +        This is similar to the wl_pointer.set_cursor and  | 
 | 150 | +        zwp_tablet_tool_v2.set_cursor requests, but this request accepts a  | 
 | 151 | +        shape instead of contents in the form of a surface. Clients can mix  | 
 | 152 | +        set_cursor and set_shape requests.  | 
 | 153 | + | 
 | 154 | +        The serial parameter must match the latest wl_pointer.enter or  | 
 | 155 | +        zwp_tablet_tool_v2.proximity_in serial number sent to the client.  | 
 | 156 | +        Otherwise the request will be ignored.  | 
 | 157 | +      </description>  | 
 | 158 | +      <arg name="serial" type="uint" summary="serial number of the enter event"/>  | 
 | 159 | +      <arg name="shape" type="uint" enum="shape"/>  | 
 | 160 | +    </request>  | 
 | 161 | +  </interface>  | 
 | 162 | +</protocol>  | 
0 commit comments