11 KiB
11 KiB
CHANGELOG - Extension GNOME Shell ASUS RGB Keyboard
Ce fichier documente l'évolution du développement de l'extension pour faciliter la reprise du travail.
[Non publié] - En cours de développement
📅 2025-12-21
🆕 Nouvelles Améliorations (Session 4)
Amélioration 4: Presets GNOME et restauration thème ✅
- Demande: Remplacer les 6 presets personnalisés par les 9 couleurs d'accentuation GNOME
- Solution implémentée:
- Modification du schéma GSettings : ajout de
preset-7,preset-8,preset-9 - Mise à jour de tous les presets avec les couleurs GNOME officielles :
- Bleu (53, 132, 228) - couleur par défaut GNOME
- Turquoise (51, 209, 122)
- Vert (87, 227, 137)
- Jaune (246, 211, 45)
- Orange (255, 120, 0)
- Rouge (237, 51, 59)
- Rose (246, 97, 81)
- Violet (145, 65, 172)
- Gris ardoise (119, 118, 123)
- Adaptation UI : boucle de 6 → 9 presets, ajustement taille boutons (32px → 28px)
- Restauration thème : désactiver la synchronisation remet GNOME sur "blue" (défaut)
- Modification du schéma GSettings : ajout de
- Résultat: Cohérence totale entre presets clavier et couleurs d'accentuation GNOME
Amélioration 5: Style presets ronds et surbrillance ✅
- Demande: Presets en forme de ronds avec cercle blanc autour du preset actif
- Solution implémentée:
- Modification style :
border-radius: 50%pour rendre les presets circulaires - Taille ajustée : 26×26px pour des cercles parfaits
- Fonction
_updatePresetSelection(): cercle blanc épais (3px) + box-shadow sur le preset actif - Stockage des boutons dans
this._presetButtons[]avec propriétés_presetet_baseStyle - Comparaison RGB avec tolérance de ±10
- Appel à chaque changement de couleur pour mise à jour en temps réel
- Modification style :
- Résultat: Feedback visuel clair du preset actuellement sélectionné
Amélioration 6: Synchronisation thème universelle ✅
- Problème: Synchronisation thème GNOME fonctionnait uniquement depuis la roue chromatique
- Cause:
_onPresetClicked()appelait directementBackend.writeRGB()au lieu de_onRGBChanged() - Solution: Refactorisation de
_onPresetClicked()pour utiliser_onRGBChanged() - Déclenchement synchronisation maintenant actif:
- ✅ Depuis la roue chromatique
- ✅ Depuis les sliders RGB
- ✅ Depuis les presets
- ✅ Depuis le slider Master
- Résultat: La couleur GNOME se synchronise peu importe le mode de sélection utilisé
🆕 Nouvelles Améliorations (Session 2 et 3)
Amélioration 1: Surbrillance des boutons d'intensité ✅
- Problème: Les boutons OFF/1/2/3 n'affichaient pas de surbrillance du niveau sélectionné
- Cause: Classe CSS incorrecte (
'button'au lieu de'brightness-button') - Solution: Correction de
style_classdans_buildBrightnessButtons() - Résultat: Bouton actif affiché avec fond bleu et texte blanc gras
Amélioration 2: Surbrillance de la couleur sélectionnée dans la roue ✅
- Problème: Pas de feedback visuel sur la couleur active dans la roue chromatique
- Solution implémentée:
- Stockage des 113 boutons dans
this._wheelButtons[] - Ajout de propriétés
_rgbet_baseStylesur chaque bouton - Nouvelle fonction
_updateWheelSelection()pour mettre à jour la bordure - Bordure blanche épaisse (3px) + box-shadow sur la couleur sélectionnée
- Comparaison RGB avec tolérance de ±10 pour gérer les approximations HSL
- Stockage des 113 boutons dans
- Appels:
- ✅ À la construction de la roue (affichage initial)
- ✅ Sur clic dans la roue
- ✅ Sur clic preset
- ✅ Sur changement de couleur
- Résultat: Indication claire de quelle couleur est actuellement appliquée dès l'ouverture du menu
Amélioration 3: Synchronisation avec le thème GNOME ✅
- Demande: Appliquer automatiquement la couleur du clavier comme couleur d'accentuation GNOME
- Solution implémentée:
- Ajout clé GSettings
sync-gnome-theme(booléen, défaut: false) - Fonction
_rgbToGnomeAccent(): mapping RGB → 9 couleurs GNOME (blue, teal, green, yellow, orange, red, pink, purple, slate) - Algorithme: distance euclidienne dans l'espace RGB pour trouver la couleur la plus proche
- Fonction
_syncGnomeTheme(): applique viaorg.gnome.desktop.interface accent-color - UI:
PopupSwitchMenuItem"Synchroniser thème GNOME" après les presets
- Ajout clé GSettings
- Déclenchement:
- ✅ Activation de la case à cocher (application immédiate)
- ✅ Lors de chaque changement de couleur clavier (si activé)
- Résultat: La couleur d'accentuation GNOME (affichée dans Paramètres → Apparence) change automatiquement pour correspondre au clavier RGB
🔍 Analyse des Problèmes Identifiés (Session 1)
Problème 1: Roue chromatique non fonctionnelle
- Symptôme: Impossible de sélectionner une couleur en cliquant sur la roue
- Cause identifiée:
- Première tentative avec
St.DrawingAreanon interactive sous GNOME Shell 48 - Deuxième tentative avec grille 16×16 de boutons (cellSize: 12px) potentiellement trop petits
- Les boutons sont créés mais les clics ne sont pas détectés
- Première tentative avec
- Hypothèse: Boutons trop petits (12px) ou problème de style CSS empêchant l'interaction
Problème 2: Niveau d'intensité non visuellement sélectionné
- Symptôme: Aucune indication visuelle du bouton d'intensité actif
- Cause: Pas de mise à jour du style CSS lors du clic
- Solution: Ajouter classe CSS active et mettre à jour dans
_updateBrightnessButtons()
Problème 3: Mode par défaut incorrect
- Symptôme: Mode sliders affiché par défaut alors que l'utilisateur préfère la roue
- Cause:
this._colorPickerMode = 'sliders'dans l'initialisation - Solution: Inverser pour
this._colorPickerMode = 'wheel'
🔧 Correctifs Appliqués
Correctif 1: Roue chromatique fonctionnelle ✅
- Augmentation de la taille des cellules: 12px → 18px (+50%)
- Réduction de la grille: 16×16 → 12×12 pour meilleure visibilité
- Ajout de bordure visible
rgba(0,0,0,0.3)pour feedback visuel - Ajout de
reactive: trueettrack_hover: truepour garantir l'interactivité - Espacement entre cellules: 2px → 3px pour meilleure séparation
Correctif 2: Surbrillance des boutons d'intensité ✅
- Classe CSS
.activedéjà implémentée dans stylesheet.css - Style actif: fond bleu (
rgba(53, 132, 228, 0.8)), texte blanc, gras - Fonction
_updateBrightnessButtons()existante et fonctionnelle
Correctif 3: Mode roue par défaut ✅
- Changement de
_colorPickerMode: 'sliders'→'wheel' - Roue chromatique affichée en premier au démarrage
- Bouton de bascule pour passer en mode sliders
📊 Résumé des Améliorations
Interface utilisateur:
- ✅ Roue chromatique 12×12 avec 113 couleurs cliquables
- ✅ Boutons 18×18px, bien visibles et réactifs
- ✅ Mode roue chromatique par défaut (préférence utilisateur)
- ✅ Surbrillance automatique du niveau d'intensité actif
- ✅ Aperçu couleur dans le header avec correction gamma sRGB
Ergonomie:
- ✅ Clic sur la roue chromatique → application immédiate au clavier
- ✅ Slider Luminosité (Master) pour contrôle de l'intensité
- ✅ Bascule facile entre roue et sliders RGB
- ✅ Interface compacte et optimisée
📅 2025-12-20
✅ Terminé
- Analyse du projet : Compréhension complète des spécifications
- Architecture définie : Séparation en 3 modules (ui.js, backend.js, extension.js)
- Schéma UI créé : Documentation visuelle complète dans
docs/UI_SCHEMA.md- Diagramme Mermaid de l'architecture
- Layout ASCII du popover
- Flux de données
- Gestion des erreurs UI
- CLAUDE.md créé : Guide pour futures instances de Claude Code
- CHANGELOG.md initialisé : Ce fichier
🔄 En cours
- Prêt pour installation et tests complets
✅ Tests Matériel Réalisés (ASUS TUF Gaming A16 FA608UH)
- ✅ Contrôle brightness : Changement de niveaux 0-3 fonctionnel
- ✅ Contrôle RGB : Écriture kbd_rgb_mode validée
- ✅ Permissions udev : Règle corrigée et fonctionnelle
- Règle finale :
ACTION=="add"avecRUN+="/bin/sh -c 'chgrp kbdled ...'" - Rechargement module :
modprobe -r asus_nb_wmi && modprobe asus_nb_wmi - Permissions validées :
kbdledgroupe appliqué correctement
- Règle finale :
📋 Terminé (MVP complet)
- ✅ Arborescence complète du projet créée
- ✅ backend.js implémenté (interface sysfs + debouncing)
- ✅ ui.js implémenté (construction du popover complet)
- ✅ extension.js créé (lifecycle GNOME Shell)
- ✅ Schéma GSettings complet avec 6 presets
- ✅ metadata.json créé
- ✅ stylesheet.css créé pour le styling
- ✅ Documentation installation (docs/INSTALL.md)
- ✅ Documentation troubleshooting (docs/TROUBLESHOOTING.md)
- ✅ Documentation tests (docs/TESTING.md)
- ✅ Script d'installation (tools/install-local.sh)
- ✅ README.md complet et détaillé
🎯 Décisions techniques prises
- Langage: GJS (JavaScript GNOME Shell)
- GNOME Shell: Version 48
- UUID:
asus-kbd-rgb@gilles - Master Slider: Mode "gain" (multiplie R/G/B par 0-100%)
- Debouncing: 75ms pour les sliders
- Permissions: Règle udev + groupe
kbdled(approche simple) - Step RGB par défaut: 5
- Comportement brightness=0: Mémoriser RGB sans écrire kbd_rgb_mode
📝 Presets couleur par défaut
- Orange: (255, 165, 0)
- Rouge: (255, 0, 0)
- Vert: (0, 255, 0)
- Bleu: (0, 0, 255)
- Blanc: (255, 255, 255)
- Cyan: (0, 255, 255)
🔧 Interface matérielle
- Path brightness:
/sys/class/leds/asus::kbd_backlight/brightness - Path max:
/sys/class/leds/asus::kbd_backlight/max_brightness - Path RGB:
/sys/class/leds/asus::kbd_backlight/kbd_rgb_mode - Format RGB:
1 0 R G B 0\n
Notes pour reprise du développement
Prochaines étapes recommandées
- Créer l'arborescence complète des fichiers
- Implémenter backend.js en premier (base pour tests)
- Implémenter ui.js (interface)
- Créer extension.js pour intégrer les modules
- Tester avec règles udev configurées
Points d'attention
- Permissions critiques: L'extension ne peut pas fonctionner sans les règles udev
- Debouncing essentiel: Éviter de spammer sysfs lors des déplacements de sliders
- Clamping obligatoire: Toujours valider 0-255 pour RGB, 0-max pour brightness
- GNOME Shell 48: Vérifier la compatibilité API (notamment pour Slider)
- Wayland vs X11: Différence pour le rechargement en dev
Dépendances système
- GNOME Shell 48
- GLib/GIO pour sysfs
- GSettings pour la persistance
- udev pour les permissions
Structure des modules
backend.js → Fonctions exportées:
- checkHardwareSupport()
- checkPermissions()
- readBrightness()
- writeBrightness(value)
- readRGB()
- writeRGB(r, g, b, master)
- applyPreset(presetId)
ui.js → Classe exportée:
- KeyboardRGBIndicator extends PanelMenu.Button
- Méthodes: _buildUI(), _onRGBChanged(), _onBrightnessChanged(), etc.
extension.js → Fonctions requises:
- init()
- enable()
- disable()
Tests à effectuer lors de la reprise
- Extension se charge sans erreur
- Popover s'affiche au clic
- Sliders fonctionnent
- Debouncing actif (vérifier dans les logs)
- Écriture sysfs réussie (avec permissions)
- GSettings sauvegarde correctement
- Restauration au redémarrage de session