Implémentation minimale du global wl_subcompositor v1 côté compositor.
Couvre uniquement le protocole : bind, GetSubsurface, et tous les
requests wl_subsurface (SetPosition, PlaceAbove/Below, SetSync/SetDesync,
Destroy). Les données sont stockées dans SubsurfaceData mais ne sont
pas encore consommées par le rendering — c'est le scope de 13.2.b.2.
Ce qui marche maintenant :
- Un client qui bind wl_subcompositor le trouve à v1
- get_subsurface(child, parent) ne crashe pas, retourne un wl_subsurface
valide avec SubsurfaceData attaché (parent ref, child ref, position
pending, sync mode default true)
- Toutes les requests subséquentes sont acceptées sans erreur protocole
- destroy : no-op propre (la resource est nettoyée par wayland-server)
Limitations explicites pour 13.2.b.2 :
- Pas de role-tracking (la spec exige bad_surface si la wl_surface
enfant a déjà un rôle ; on log debug seulement)
- Pas de cascade sync : un commit du parent ne propage pas les states
pending des subsurfaces
- PlaceAbove/Below : no-op (single-subsurface use-case suffit pour 13.2.b)
- compose_into ne sait pas dessiner les subsurfaces
Test natif (cargo test, sans QEMU) :
- Vérifie l'annonce du global à v1
- Bind + create_surface ×2 + get_subsurface + tous les requests
wl_subsurface successifs + destroy
- Roundtrip à chaque étape pour capter d'éventuelles erreurs protocole
- PASS le 2026-05-16 sur CachyOS
Leyoda 2026 – GPLv3