7.1 KiB
QuickShell Dock Tela — Polish V2
Livraison isolée du 22 octobre 2026, base d4e2a001, branche
quickshell-dock-tela-polish-v2, worktree
/home/fy59/.dotfiles-worktrees/quickshell-dock-tela-polish-v2.
La configuration du bureau actif n’a pas été modifiée ou rechargée.
Cause et correction du hover
La V1 animait la largeur de chaque case de la Row et celle de chaque
ApplicationIcon. Chaque déplacement du pointeur modifiait donc les positions
suivantes, la largeur de la rangée et potentiellement celle de la surface.
De plus, ApplicationIcon calcule le sourceSize de son image depuis sa largeur :
la variation de taille demandait de nouvelles résolutions de rasterisation pour
les SVG Tela asynchrones. Ces deux chemins constituent les causes structurelles
identifiées des saccades et du risque de clignotement. Aucun profilage GPU du
bureau physique n’est revendiqué.
Les cases gardent désormais une largeur de 54 px (plus le séparateur éventuel),
un pas de 57 px et des cibles souris fixes. Les images restent à 46 × 46 px,
avec une résolution demandée fixe de 92 × 92 px. Seul leur scale varie de
1 à 1,39, ancré en bas, avec une interpolation OutCubic de 80 ms. La taille
visuelle maximale est ainsi d’environ 64 px. Les deux marges de 12 px à
l’intérieur du viewport protègent aussi les icônes agrandies aux extrémités,
y compris après défilement sur un petit écran.
L’influence du pointeur est une courbe smoothstep, symétrique, de rayon 76 px. Ce rayon est inférieur à un pas et demi : seules la case la plus proche et ses voisines immédiates peuvent recevoir une cible de grossissement non nulle. Les positions de référence restent indépendantes de la transformation. Les transitions peuvent brièvement finir leur interpolation après la sortie du rayon. Aucun IPC, blur, chargement d’image ni relayout n’est déclenché par l’animation elle-même. Les petits calculs d’influence restent liés au pointeur ; aucun timer de polling ou délai de regroupement supplémentaire n’est nécessaire.
Fond flottant
Le voile principal passe de 89 % à 16 % d’opacité, sa hauteur de 70 à 58 px,
avec une bordure de 1 px à 9 % d’opacité. Une RectangularShadow QtQuick.Effects,
de géométrie fixe, produit l’ombre diffuse (blur 24, spread 2, noir à 32 %).
Elle ne capture ni les icônes ni le bureau. Le mode de contraste élevé conserve
un fond plus soutenu à 94 % et une bordure à 50 % pour la lisibilité.
La règle SwayFX du seul namespace labfy-sway-dock désactive le flou du fond.
Le compromis retenu est un verre teinté très transparent, sans réfraction ni
flou des fenêtres derrière. Le rendu ne dépend donc plus d’un flou compositeur
recalculé pendant le hover. Les effets de la barre restent inchangés.
RectangularShadow nécessite Qt ≥ 6.9 ; l’hôte testé utilise Qt 6.12.0,
QuickShell 0.3.2 et SwayFX 0.6 (Sway 1.12.0).
Contrats préservés
La machine auto-hide conserve sa bande de 4 px, son armement de 180 ms,
sa grâce de sortie de 450 ms et son animation verticale de 210 ms.
WlrKeyboardFocus.None, couche Top, exclusiveZone: 0 et le masque d’entrée
restent en place. Aucune place permanente n’est réservée à l’écran.
Le menu, FavoritesService, la résolution Tela et le format des favoris
partagés sont inchangés. Aucun fichier Session V2, Keyring, PAM, greetd ou
logique de session n’a été modifié.
Validation
Les tests s’exécutent dans un Sway privé headless, avec HOME, XDG, sockets Wayland/Sway et profil Firefox privés, sans bus de session hérité. Les enfants sont arrêtés par le laboratoire. Les journaux et résultats sont conservés dans validation/quickshell-dock-tela-polish-v2.
Commandes reproductibles depuis le worktree :
python -m unittest discover -s tests/applications -v
node tests/applications/test_model.js
python -m unittest discover -s tests/dock -v
node tests/dock/test_models.js
python -m unittest discover -s tests/session_v2 -v
python tests/dock/headless.py
python tests/dock/shell_load.py
python tests/dock/session_compat.py
python tests/session_v2/validate_keyring.py --sway /usr/bin/sway
git diff --check
Résultats : 7 tests applications, 6 tests dock, 93 tests Session V2 backend, les deux suites JavaScript, le chargement du shell complet, le scénario dock et les scénarios Session V2/Keyring avec dock passent. Le validateur Keyring complet termine avec ses onze contrôles à zéro (succès).
Le test dock vérifie notamment :
- 73 positions latérales sans changement de géométrie, sans changement d’état des images et avec au plus trois influences non nulles ;
- 4,5 secondes de balayage continu, un mouvement souris par frame Qt, sans changement de géométrie ni d’état de chargement des images ;
- extrémités non rognées après défilement sur une sortie de 400 px ;
- auto-hide, maintien pendant le menu contextuel, drag réel et redémarrage vide ;
- synchronisation menu/dock/client externe et réordonnancement durable ;
- absence de vol de focus vers le dock, fenêtres Kitty/Firefox privées, reconnexion IPC et changements de résolution ;
- navigation clavier du menu et présence de la règle SwayFX sans blur du dock.
Le dernier passage mesure 281 intervalles : moyenne 16.00 ms,
95e percentile 16.46 ms, maximum 16.62 ms.
Les intervalles d’animation sont conservés dans result.json ; ce sont des
mesures de cadence Qt avec rendu logiciel, pas des timestamps de présentation
matérielle. Ils établissent la stabilité du laboratoire privé. La perception
sur le GPU, le fond d’écran et les sorties physiques de la session active reste
à confirmer après intégration, sans prétendre l’avoir observée ici.
Captures issues de grim, sans retouche :
Intégration
Le patch complet, fichiers nouveaux et PNG compris, se trouve à côté du worktree :
/home/fy59/.dotfiles-worktrees/quickshell-dock-tela-polish-v2.patch.
Les changements restent non commités et aucun fichier de favoris n’est livré.
Après revue, depuis le dépôt principal à la base compatible :
cd /home/fy59/.dotfiles
git apply --check /home/fy59/.dotfiles-worktrees/quickshell-dock-tela-polish-v2.patch
git apply /home/fy59/.dotfiles-worktrees/quickshell-dock-tela-polish-v2.patch
swaymsg reload
systemctl --user restart quickshell-labfy-sway.service
La vérification git apply --check est effectuée à la livraison. Les trois
commandes d’application/rechargement restent à exécuter lors de l’intégration.
Le redémarrage QuickShell recharge aussi les autres composants du shell.
Après intégration, vérifier visuellement un balayage latéral, l’auto-hide et
le menu sur les sorties physiques. Il n’est pas nécessaire de réécrire les
favoris ou de redémarrer la session utilisateur.