xdg-shell: Soften fullscreen geometry requirements

Having a strict requirement on clients obeying the configured window
geometry for fullscreen toplevel surfaces might have the side effect of
making it harder or impossible to implement various hardware
optimizations on certain system configurations. By softening
requirements on the geometry while loosely defining the border fill, we
remove that restriction.

Clients that still want total control of the surrounding area can
still for example prepare the attached buffers to match the configured
surface size, or use subsurfaces in combination with wp_viewporter to
make up a surface matching the fullscreen window geometry dimensions.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Arnaud Vrac <rawoul@gmail.com>
Reviewed-by: Mike Blumenkrantz <zmike@samsung.com>
This commit is contained in:
Jonas Ådahl 2017-11-21 12:40:39 +08:00
parent cd1e13ed6d
commit f68bafc9c3

View file

@ -728,8 +728,11 @@
</entry> </entry>
<entry name="fullscreen" value="2" summary="the surface is fullscreen"> <entry name="fullscreen" value="2" summary="the surface is fullscreen">
<description summary="the surface is fullscreen"> <description summary="the surface is fullscreen">
The surface is fullscreen. The window geometry specified in the configure The surface is fullscreen. The window geometry specified in the
event must be obeyed by the client. configure event is a maximum; the client cannot resize beyond it. For
a surface to cover the whole fullscreened area, the geometry
dimensions must be obeyed by the client. For more details, see
xdg_toplevel.set_fullscreen.
</description> </description>
</entry> </entry>
<entry name="resizing" value="3" summary="the surface is being resized"> <entry name="resizing" value="3" summary="the surface is being resized">
@ -888,7 +891,7 @@
After requesting that the surface should be fullscreened, the After requesting that the surface should be fullscreened, the
compositor will respond by emitting a configure event with the compositor will respond by emitting a configure event with the
"fullscreen" state and the required window geometry. The client must "fullscreen" state and the fullscreen window geometry. The client must
also acknowledge the configure when committing the new content (see also acknowledge the configure when committing the new content (see
ack_configure). ack_configure).
@ -899,7 +902,14 @@
If the surface doesn't cover the whole output, the compositor will If the surface doesn't cover the whole output, the compositor will
position the surface in the center of the output and compensate with position the surface in the center of the output and compensate with
black borders filling the rest of the output. 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> </description>
<arg name="output" type="object" interface="wl_output" allow-null="true"/> <arg name="output" type="object" interface="wl_output" allow-null="true"/>
</request> </request>