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

@@ -145,9 +145,6 @@ impl FereseShell {
pub fn animate_menu(&mut self) -> Task<Message> {
if let Some(menu) = &self.menu {
if let Some(effects) = &menu.effects {
let _ = effects.set_opacity(menu.progress().clamp(0.0, 1.0));
}
if menu.motion.closing() && !menu.animating() {
return self.destroy_menu();
}
+7 -2
View File
@@ -120,6 +120,7 @@ impl OpenMenu {
super::EFFECT_FRAME_PENDING.store(false, Ordering::Relaxed);
}
#[cfg(test)]
pub fn progress(&self) -> f32 {
self.motion.progress()
}
@@ -138,8 +139,12 @@ impl FereseShell {
|now| menu.motion.frame_active(now),
|now| {
if let Some(effects) = &menu.effects {
let _ = effects.set_regions(&menu.regions.lock().unwrap());
let _ = effects.set_opacity(menu.motion.progress_at(now).clamp(0.0, 1.0));
let _ = effects.set_presentation(
&menu.regions.lock().unwrap(),
menu.motion.progress_at(now),
[],
super::ferese_surface_effects_v1::Role::Popover,
);
}
},
|now| {