You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libcutefish/protocols/cutefish-shell-v1.xml

139 lines
5.7 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<protocol name="cutefish_shell_v1">
<description summary="the desktop surface of the trusted session client">
This protocol lets the trusted client the session starts on its own
connection (the file manager's daemon) say that a surface is the desktop
of an output: below every window, kept to the output, told the work area
its icons go in.
It is an *extension* of an ordinary wl_surface, not a replacement for
xdg-shell. The client keeps creating xdg_toplevel objects through
xdg_wm_base exactly like any other Wayland client; this protocol only adds
the role, the output, the focus policy and the work area that plain
xdg-shell cannot express.
The compositor only advertises this global on the one trusted connection
it was handed by the session. Ordinary applications never see it.
Warning! Not a standard protocol. Backward-incompatible changes are made by
bumping the interface version.
</description>
<interface name="cutefish_shell_v1" version="1">
<description summary="private shell interface">
A factory for cutefish_shell_surface_v1 objects.
</description>
<enum name="error">
<entry name="role" value="0"
summary="the wl_surface already has a cutefish_shell_surface_v1"/>
</enum>
<request name="destroy" type="destructor">
<description summary="release the shell interface">
Destroying the factory does not destroy the shell surfaces it created.
</description>
</request>
<request name="get_shell_surface">
<description summary="extend a wl_surface with shell metadata">
Creates a cutefish_shell_surface_v1 for the given wl_surface.
The wl_surface must belong to the same client and the same connection.
Giving a surface two shell surfaces raises the role error.
The metadata carried by the new object should be set before the first
buffer is committed on the surface, so the compositor never has to
place the surface as an ordinary window first.
</description>
<arg name="id" type="new_id" interface="cutefish_shell_surface_v1"/>
<arg name="surface" type="object" interface="wl_surface"/>
</request>
</interface>
<interface name="cutefish_shell_surface_v1" version="1">
<description summary="shell metadata attached to a wl_surface">
Describes what the compositor should make of a shell surface. All state
here takes effect immediately rather than on the next wl_surface.commit:
the shell sets it once when the surface is created and the compositor
applies it to the window the surface's xdg role produces.
</description>
<enum name="error">
<entry name="invalid_role" value="0" summary="unknown role value"/>
<entry name="invalid_focus_policy" value="3" summary="unknown focus policy"/>
<entry name="invalid_output" value="4" summary="unknown logical output"/>
</enum>
<enum name="role">
<description summary="what the surface is">
The desktop of its output: stacked below every window, over the
compositor's wallpaper, and covering the output.
</description>
<entry name="desktop" value="0" summary="the desktop, below everything"/>
</enum>
<enum name="focus_policy">
<entry name="normal" value="0" summary="the window can take keyboard focus"/>
<entry name="no_focus" value="1"
summary="the window receives pointer input but never keyboard focus"/>
</enum>
<request name="destroy" type="destructor">
<description summary="drop the shell metadata">
The surface goes back to being an ordinary window.
</description>
</request>
<request name="set_role">
<description summary="set the surface role">
Must be sent before the surface is first mapped. Changing the role of a
mapped surface is allowed but the compositor may only apply it the next
time the surface is mapped.
</description>
<arg name="role" type="uint" enum="role"/>
</request>
<request name="set_focus_policy">
<arg name="policy" type="uint" enum="focus_policy"/>
</request>
<request name="activate">
<description summary="give this surface the keyboard focus">
The trusted way for the desktop to take the keyboard, as it does once
when first shown. No serial is required: the client is trusted, and
this activation does not come from an input event it can point at.
Ignored while the surface has no window, or while its focus policy is
no_focus.
</description>
</request>
<request name="set_output">
<description summary="associate this surface with a logical output">
Selects the logical output by its stable wl_output name. A desktop is
placed at its output's origin, by default the primary output's, and
follows it when the layout changes; the client sizes it to the
output.
</description>
<arg name="name" type="string" summary="wl_output name"/>
</request>
<event name="work_area">
<description summary="where a desktop lays out its content">
Sent to a desktop surface: its output's bounds less what the
compositor's own panels and every exclusive zone reserve, where
windows are laid out. In surface-local logical pixels, the surface
being placed at its output's origin. Sent once the surface is a
desktop, before its first configure, and again whenever the work area
or the surface's output changes.
</description>
<arg name="x" type="int"/>
<arg name="y" type="int"/>
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</event>
</interface>
</protocol>