Synchronize shell material presentation with surface commits

Queue popup, modal and notification material geometry and opacity until the matching content buffer commits. Remove event-handler opacity writes that could present material state ahead of content, while preserving compositor dismissal ownership.

Add pending-presentation regression coverage and update the nested shell lifecycle check.
This commit is contained in:
Samuel Onoja committed 2026-10-03 04:45:12 +01:00
1 parent e6e1a2a8cf
commit bffd538dd4
9 files changed
+159 -50

No files matched your search

+16 -2
View File
@@ -22,7 +22,7 @@
DEALINGS IN THE SOFTWARE.
</copyright>
<interface name="ferese_effects_manager_v1" version="4">
<interface name="ferese_effects_manager_v1" version="5">
<description summary="assign semantic material roles to surfaces">
This private global is visible only to clients granted the Ferese effects
capability. Roles describe compositor-owned appearance policy and do not
@@ -48,7 +48,7 @@
</enum>
</interface>
<interface name="ferese_surface_effects_v1" version="4">
<interface name="ferese_surface_effects_v1" version="5">
<description summary="semantic material role for one surface">
The role affects only compositor rendering. It does not change surface
geometry, input, focus, stacking, or the surface's Wayland role.
@@ -107,5 +107,19 @@
</description>
<arg name="opacities" type="array"/>
</request>
<request name="set_presentation" since="5">
<description summary="apply material presentation with the next surface commit">
Queue the role, regions, surface opacity and region opacities together.
They take effect on the next wl_surface.commit, with its content buffer.
Array formats and limits match set_regions and set_region_opacities.
Invalid arrays or roles leave the pending state unchanged. Surface opacity
is clamped to 1000. The last valid request before a commit wins.
Compositor-owned dismissal retains control of surface opacity.
</description>
<arg name="role" type="uint" enum="role"/>
<arg name="regions" type="array"/>
<arg name="opacity" type="uint"/>
<arg name="region_opacities" type="array"/>
</request>
</interface>
</protocol>