Wayland natif
Compose Desktop sur Wayland directement — pas de repli XWayland, scaling fractionnaire, vrais gestes.
Sur JBR, les apps Compose Linux retombent sur XWayland — scaling fractionnaire flou, pas de gestes réels, HiDPI cassé en multi-écran. Le backend Tao parle Wayland directement : vraies surfaces, vrai scaling fractionnaire, vrai wl_pointer_gestures.
TL;DR
wl_surfacenative — pas d'aller-retour XWayland.- Scaling fractionnaire via
wp_fractional_scale_v1(fin de l'escalier 1x/2x). - Multi-touch et stylet via
pointer-gestures-unstable-v1etwp_tablet_v2. - Drag-and-drop via
wl_data_device, décorations client viaxdg-decoration. - Repli X11 transparent sur les sessions legacy.
Install
Inclus avec decorated-window-tao.
Quickstart — détecter la session
import dev.nucleusframework.core.runtime.Platform
val onWayland = Platform.isWayland
val desktopEnv = Platform.Current.let { if (it == Platform.Linux) LinuxDesktopFileDetector.detect() else null }Sans en général pas besoin de brancher sur cette info — le code Compose reste identique. Pratique pour les diagnostics et les feature gates (badges, taskbar progress, hotkeys globaux varient selon la session).
Comment ça marche
Tao lie les protocoles Wayland standards au démarrage : xdg-shell pour les fenêtres, xdg-decoration pour négocier les décorations client/serveur, wp_fractional_scale_v1 pour les facteurs de scale sous-entiers, pointer-gestures-unstable-v1 pour pinch/swipe, wp_tablet_v2 pour le stylet. Skiko rend dans une surface EGL attachée à ce wl_surface.
Quand le compositeur signale un changement de scale (la fenêtre se déplace d'un moniteur 1.0 vers un 1.5), Tao reconfigure la surface EGL et émet un changement de densité à Compose. Les valeurs Dp restent logiques ; le rendu devient net. Voir HiDPI par moniteur.
Si on lance sur une session X11 (ou un compositeur Wayland qui refuse les décorations XDG), Tao bascule en X11 automatiquement. Le code Compose ne change pas.
Différences Wayland vs X11
| Aspect | Wayland (Tao) | X11 (repli) |
|---|---|---|
| Scaling fractionnaire | Natif, par sortie | Pixel entier uniquement |
| Placement de fenêtre | Contrôlé par le compositeur | Le client peut poser une position |
| Hotkeys globaux | Médiés (xdg-portal) | XGrabKey |
| Capture d'écran | Portal uniquement | Direct |
| Pression stylet | wp_tablet_v2 | Non exposée |
| Gestes multi-touch | pointer-gestures-unstable-v1 | Limités |
Placement de fenêtre sur Wayland : on ne peux pas poser de coordonnées écran absolues — le compositeur possède le placement. WindowState.position est honoré par certains compositeurs en tant que hint, ignoré par d'autres (GNOME, notamment, ignore les positions demandées par le client). Construis le layout autour de Center, PlatformDefault, ou mémorise juste la dernière taille.
Reference
Platform.isWayland—truequandWAYLAND_DISPLAYest défini et la session est Wayland.Platform.Current—Linux | Windows | MacOS | Unknown.LinuxDesktopEnvironmentetLinuxDesktopFileDetector— distinguent GNOME, KDE, Sway, etc.
Voir aussi : Multi-touch & gestes, Stylet, HiDPI par moniteur.