4.2 KiB
QuickShell Dock — organisation et menu contextuel (11 novembre 2026)
Objectif
Conserver le dock QuickShell SwayFX existant (zoom fixe, centrage, bande d'activation de 4 px sur toute la largeur, couche Top sans focus clavier), mais permettre de réorganiser les icônes épinglées et de gérer des séparateurs.
Organisation du dock
- Glisser une icône épinglée pour la replacer par rapport aux autres favoris.
- Clic droit sur une icône épinglée : « Déplacer à gauche » et « Déplacer à droite » lorsqu'un déplacement est possible.
- Clic droit sur une icône épinglée : « Ajouter séparateur avant/après ».
- Cliquer ou faire clic droit sur un séparateur : déplacer à gauche/droite ou le supprimer. Le glisser-déposer d'un séparateur est également pris en charge.
- Les fenêtres ouvertes non épinglées demeurent après les favoris ; le séparateur automatique à cette frontière est conservé.
La liste partagée des favoris conserve son contrat et son fichier v1 :
~/.local/state/labfy-sway/applications-favorites.json. Les séparateurs
sont enregistrés séparément dans
~/.local/state/labfy-sway/dock-separators.json. Le format est strict,
limité à 16 séparateurs, avec écriture atomique, verrou de répertoire et
rejet sans écrasement d'un fichier invalide. Aucun identifiant de séparateur
n'est accepté comme application exécutable.
Fermeture et transparence du menu
Le menu contextuel n'a plus de ligne « Fermer le menu ».
- Un clic dans la marge autour du menu le ferme immédiatement, sans lancer l'application située derrière cette marge.
- Un éloignement du pointeur au-delà de cette zone déclenche une fermeture avec 480 ms de tolérance ; survoler de nouveau le menu annule l'échéance.
- La surface Wayland d'entrée est limitée à une petite zone autour du menu et au dock existant. Le reste du bureau demeure interactif ; en dehors de la zone de capture, la fermeture provient de l'éloignement du pointeur, pas d'une interception globale des clics.
- Le fond de menu a 85 % d'opacité (soit 15 % de transparence), avec les textes entièrement opaques. Le mode de contraste élevé conserve un fond presque opaque (94 %). Les survols de ses actions restent translucides.
L'auto-hide, les menus, l'animation et le focus des fenêtres ne sont pas transformés en commandes Sway. Aucun redémarrage de Sway n'est nécessaire.
Vérifications non destructives
tests/dock/test_separators.pyvalide stockage, suppression, déplacements, corruption, liens symboliques, opérations concurrentes et invariants v1.tests/dock/test_models.jsvalide les séparateurs et déplacements.tests/dock/headless.pyutilise un SwayFX privé ; les actions réelles du menu sont exercées, y compris clic à côté, délai d'éloignement, survol prolongé, couleur et gestion réelle d'un séparateur.- Les tests applications/dock, le shell complet, la compatibilité Session V2 et le lint QML sont exécutés avant l'activation sur ArchASP.
Les traces de test sont conservées dans
~/.cache/labfy-dock-context-dismiss-v1. Aucune modification volontaire
de la liste réelle de favoris ni de l'état Session Restore V2.
Correction de la zone morte centrale (11 novembre 2026)
La fermeture automatique introduisait une régression dans la zone de survol :
les régions dismissZone et context étaient soustraites du masque
Wayland lorsqu'elles étaient invisibles. Leur géométrie continuait pourtant
d'exister, ce qui creusait des trous dans la bande sensible de 4 px, notamment
au centre de l'écran.
Les régions secondaires du masque utilisent désormais uniquement l'opération
Combine, avec largeur et hauteur égales à zéro tant que leurs composants
ne doivent pas recevoir la souris. Le capteur pleine largeur n'est donc
jamais soustrait, ni au démarrage ni après fermeture d'un menu. La zone
cliquable du menu n'est ajoutée qu'à son ouverture.
Le test SwayFX privé tests/dock/headless.py vérifie les trois régions
vides lorsque le dock est masqué, leur activation lorsque le menu apparaît,
leur désactivation après fermeture et un nouveau survol au centre, en plus
des deux coins. Il n'agit pas sur le pointeur physique de l'utilisateur.