diff --git a/crates/redox-wl-wayland-frontend/src/lib.rs b/crates/redox-wl-wayland-frontend/src/lib.rs index 4f85505..938e5a1 100644 --- a/crates/redox-wl-wayland-frontend/src/lib.rs +++ b/crates/redox-wl-wayland-frontend/src/lib.rs @@ -1603,6 +1603,36 @@ impl wayland_server::Dispatch> for Wayla // indépendamment de leur parent ; elles vivent à // parent.z + 1 par convention de leur création. state.registry.raise(id); + + // Phase 13.2.b.2 fix bug visuel : si on vient de raise un + // parent toplevel, raise aussi toutes ses subsurfaces + // pour qu'elles restent au-dessus dans le z_order. Sinon + // un re-commit du parent (sans buffer) après création + // des subsurfaces les masquerait. Cas observé sur le + // client de test 13.2.b.3 où le parent.commit() final + // de rafraîchissement faisait disparaître le carré rouge. + let parent_id_to_match = id; + let children_to_raise: Vec = state + .surfaces_by_id + .iter() + .filter_map(|(sid, surf)| { + let sd = surf.data::>()?; + let link = sd.subsurface_link.lock().unwrap(); + let ld = link.as_ref()?; + let parent_sid = ld + .parent + .data::>() + .and_then(|psd| *psd.id.lock().unwrap())?; + if parent_sid == parent_id_to_match { + Some(*sid) + } else { + None + } + }) + .collect(); + for cid in children_to_raise { + state.registry.raise(cid); + } } // Frame callbacks en attente → bump dans la queue globale