Wire le SubsurfaceData (introduit en 13.2.b.1) au commit du child wl_surface :
- Ajout d'un champ subsurface_link: Mutex<Option<Arc<SubsurfaceData>>>
à SurfaceData, peuplé par wl_subcompositor.GetSubsurface
- Au commit du child : on détecte le subsurface_link, on remonte la
position absolue du parent depuis le registry, on additionne l'offset
pending (modifiable via SetPosition), et on l'écrit sur pending state
du child avant que registry.commit applique pending→current
- Skip raise() et set_focus() pour les subsurfaces : elles ne grabbent
pas le focus, et leur z-order reste à parent.z+1 par construction
(création après le parent dans le registry)
compose_into n'est pas modifié : il itère le z_order et dessine chaque
surface à son x/y absolu. Le child apparaît donc naturellement à la
bonne position après notre prep.
Limitations connues (à traiter en phase ultérieure si besoin) :
- Si le parent toplevel bouge (drag interactif phase 7.7), ses
subsurfaces ne suivent pas tant que le client ne re-commit pas
l'enfant. Pour les use-cases statiques (notre test 13.2.b.3 à venir),
c'est OK ; pour Wayland conforme strict il faudra walker les enfants
au move du parent.
- wl_subsurface.Destroy ne unmap pas le child (spec violation mineure).
Si le client veut vraiment retirer la subsurface, il doit aussi
destroy son wl_surface enfant — chemin déjà géré.
- Pas de cascade sync : un commit du parent en mode sync devrait
flusher les pending states des subsurfaces sync. Ignoré pour l'instant
(notre client de test commitera child directement).
Les tests natifs 13.2.a et 13.2.b.1 continuent de passer (vérifié).
Leyoda 2026 – GPLv3