Merge branch 'work/xdg-shell-fullscreen' into 'main'

stable/xdg-shell: allow compositors to support transparent fullscreen windows

See merge request wayland/wayland-protocols!377
This commit is contained in:
Xaver Hugl 2025-12-16 17:43:19 +00:00
commit 7329c7a0a4

View file

@ -1093,16 +1093,16 @@
it's up to the compositor to choose which display will be used to map
this surface.
If the surface doesn't cover the whole output, the compositor will
position the surface in the center of the output and compensate with
with border fill covering the rest of the output. The content of the
border fill is undefined, but should be assumed to be in some way that
attempts to blend into the surrounding area (e.g. solid black).
If the surface doesn't cover the whole output or isn't opaque,
the compositor may apply either of the behaviors described by the
fullscreen_behavior enum.
While compositors are recommended to apply the opaqueness_enforced
behavior for best backwards compatibility with protocol versions 6
and ealier, this is not implemented by all compositors, so clients
can't fully rely on it.
If the fullscreened surface is not opaque, the compositor must make
sure that other screen content not part of the same surface tree (made
up of subsurfaces, popups or similarly coupled surfaces) are not
visible below the fullscreened surface.
If a specific behavior is desired, it should be explicitly requested
with set_fullscreen_2.
</description>
<arg name="output" type="object" interface="wl_output" allow-null="true"/>
</request>
@ -1211,8 +1211,16 @@
<enum name="wm_capabilities" since="5">
<entry name="window_menu" value="1" summary="show_window_menu is available"/>
<entry name="maximize" value="2" summary="set_maximized and unset_maximized are available"/>
<entry name="fullscreen" value="3" summary="set_fullscreen and unset_fullscreen are available"/>
<entry name="fullscreen" value="3">
<description summary="set_fullscreen and unset_fullscreen are available">
Starting with version 7, this also means set_fullscreen_2 is available.
</description>
</entry>
<entry name="minimize" value="4" summary="set_minimized is available"/>
<entry name="opaque_fullscreen" value="5"
summary="fullscreen behavior opaqueness_enforced is available" since="7"/>
<entry name="transparent_fullscreen" value="6"
summary="fullscreen behavior transparency_allowed is available" since="7"/>
</enum>
<event name="wm_capabilities" since="5">
@ -1240,6 +1248,52 @@
</description>
<arg name="capabilities" type="array" summary="array of 32-bit capabilities"/>
</event>
<enum name="fullscreen_behavior" since="7">
<entry name="opaqueness_enforced" value="0">
<description summary="no surfaces below the window are shown">
If the surface doesn't cover the whole output, the compositor will
position the surface in the center of the output and compensate with
with border fill covering the rest of the output. The content of the
border fill is undefined, but should be assumed to be in some way that
attempts to blend into the surrounding area (e.g. solid black).
If the fullscreened surface is not opaque, the compositor must make
sure that other screen content not part of the same surface tree (made
up of subsurfaces, popups or similarly coupled surfaces) are not
visible below the fullscreened surface.
</description>
</entry>
<entry name="transparency_allowed" value="1">
<description summary="surfaces below the window may be shown">
If the surface doesn't cover the whole output, the behavior is
compositor-specific. The client should avoid this situation.
If the fullscreened surface is not opaque, the compositor should
show elements below the surface tree.
</description>
</entry>
<entry name="dont_care" value="2" summary="the compositor should choose"/>
</enum>
<request name="set_fullscreen_2" since="7">
<description summary="set the window as fullscreen on an output">
Make the surface fullscreen with the desired behavior.
After requesting that the surface should be fullscreened, the
compositor will respond by emitting a configure event. Whether the
client is actually put into a fullscreen state is subject to compositor
policies. The client must also acknowledge the configure when
committing the new content (see ack_configure).
The output passed by the request indicates the client's preference as
to which display it should be set fullscreen on. If this value is NULL,
it's up to the compositor to choose which display will be used to map
this surface.
</description>
<arg name="output" type="object" interface="wl_output" allow-null="true"/>
<arg name="desired_behavior" type="uint" enum="fullscreen_behavior"/>
</request>
</interface>
<interface name="xdg_popup" version="7">