79 lines
4.2 KiB
Markdown
79 lines
4.2 KiB
Markdown
# 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.py` valide stockage, suppression, déplacements,
|
|
corruption, liens symboliques, opérations concurrentes et invariants v1.
|
|
- `tests/dock/test_models.js` valide les séparateurs et déplacements.
|
|
- `tests/dock/headless.py` utilise 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.
|