Nucleus
Tao backend

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_surface native — 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-v1 et wp_tablet_v2.
  • Drag-and-drop via wl_data_device, décorations client via xdg-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

AspectWayland (Tao)X11 (repli)
Scaling fractionnaireNatif, par sortiePixel entier uniquement
Placement de fenêtreContrôlé par le compositeurLe client peut poser une position
Hotkeys globauxMédiés (xdg-portal)XGrabKey
Capture d'écranPortal uniquementDirect
Pression styletwp_tablet_v2Non exposée
Gestes multi-touchpointer-gestures-unstable-v1Limité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.isWaylandtrue quand WAYLAND_DISPLAY est défini et la session est Wayland.
  • Platform.CurrentLinux | Windows | MacOS | Unknown.
  • LinuxDesktopEnvironment et LinuxDesktopFileDetector — distinguent GNOME, KDE, Sway, etc.

Voir aussi : Multi-touch & gestes, Stylet, HiDPI par moniteur.