feat: Forçage état RGB au boot + correction couleurs GNOME + presets ronds

## 🔧 Correctifs critiques

### Forçage de l'état RGB au démarrage (résout clavier éteint au boot)
- **Problème résolu**: Clavier parfois éteint au redémarrage, impossible à rallumer
- Suppression vérification `if (brightness == 0)` dans writeRGB()
- _applyCurrentState() force TOUJOURS brightness + RGB au boot
- Logs explicites pour diagnostic
- Fichiers: backend.js, ui.js
- Documentation: docs/ANALYSE_PERSISTANCE.md

### Correction couleurs GNOME officielles
- 7 des 9 presets utilisaient de mauvaises valeurs RGB
- Correction basée sur les valeurs hex officielles GNOME:
  * Turquoise #2190a4: (33,144,164) 
  * Vert #3a944a: (58,148,74) 
  * Jaune #c88800: (200,136,0) 
  * Orange #ed5b00: (237,91,0) 
  * Rouge #e62d42: (230,45,66) 
  * Rose #d56199: (213,97,153) 
  * Ardoise #6f8396: (111,131,150) 
- Fichiers: schemas/gschema.xml, ui.js (_rgbToGnomeAccent)

##  Améliorations UI

### Presets en cercles avec surbrillance
- Presets affichés en cercles parfaits (border-radius: 50%)
- Cercle blanc épais (3px) + box-shadow sur preset actif
- Fonction _updatePresetSelection() avec tolérance RGB ±10
- Mise à jour automatique à chaque changement de couleur

### Synchronisation thème universelle
- Correction: sync thème GNOME fonctionne maintenant depuis:
  *  Roue chromatique
  *  Sliders RGB
  *  Presets (corrigé!)
  *  Slider Master
- Refactorisation _onPresetClicked() pour utiliser _onRGBChanged()

## 📚 Documentation et outils

- docs/ANALYSE_PERSISTANCE.md: Analyse technique complète du problème de persistance
- docs/RESULTAT_TEST_PERSISTANCE.md: Résultats des tests de validation
- tools/test-persistance.sh: Script de test automatisé pour diagnostic

## 🧪 Tests effectués

 Initialisation au démarrage GNOME Shell
 Forçage RGB même avec brightness=0
 Couleurs GNOME corrigées dans les logs
 Presets ronds avec surbrillance fonctionnelle
 Synchronisation thème depuis tous les modes

Test au redémarrage PC: À valider par l'utilisateur

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-23 06:05:00 +01:00
parent 896173815c
commit f94ba663f8
7 changed files with 628 additions and 55 deletions

View File

@@ -178,12 +178,9 @@ export function writeRGB(r, g, b, masterGain = 100) {
// Appliquer le master gain
const adjusted = applyMasterGain(r, g, b, masterGain);
// Vérifier si brightness est > 0, sinon ne pas écrire
const currentBrightness = readBrightness();
if (currentBrightness === 0) {
console.log('Brightness est 0, RGB mémorisé mais non appliqué');
return true; // On considère cela comme un succès
}
// TOUJOURS écrire RGB, même si brightness = 0
// Cela garantit que le contrôleur RGB est dans un état connu
// Particulièrement important au démarrage pour contrer les réinitialisations firmware
// Format: "1 0 R G B 0\n"
const file = Gio.File.new_for_path(RGB_MODE_PATH);

View File

@@ -42,51 +42,51 @@
<description>Incrément lors de l'utilisation des sliders RGB</description>
</key>
<!-- Presets couleur (9 presets GNOME officiels, stockés comme "R,G,B") -->
<key name="preset-1" type="s">
<default>"53,132,228"</default>
<summary>Preset 1 - Bleu GNOME</summary>
</key>
<!-- Presets couleur (9 presets GNOME officiels, stockés comme "R,G,B") -->
<key name="preset-1" type="s">
<default>"53,132,228"</default>
<summary>Preset 1 - Bleu GNOME (#3584e4)</summary>
</key>
<key name="preset-2" type="s">
<default>"51,209,122"</default>
<summary>Preset 2 - Turquoise</summary>
</key>
<key name="preset-2" type="s">
<default>"33,144,164"</default>
<summary>Preset 2 - Turquoise (#2190a4)</summary>
</key>
<key name="preset-3" type="s">
<default>"87,227,137"</default>
<summary>Preset 3 - Vert</summary>
</key>
<key name="preset-3" type="s">
<default>"58,148,74"</default>
<summary>Preset 3 - Vert (#3a944a)</summary>
</key>
<key name="preset-4" type="s">
<default>"246,211,45"</default>
<summary>Preset 4 - Jaune</summary>
</key>
<key name="preset-4" type="s">
<default>"200,136,0"</default>
<summary>Preset 4 - Jaune (#c88800)</summary>
</key>
<key name="preset-5" type="s">
<default>"255,120,0"</default>
<summary>Preset 5 - Orange</summary>
</key>
<key name="preset-5" type="s">
<default>"237,91,0"</default>
<summary>Preset 5 - Orange (#ed5b00)</summary>
</key>
<key name="preset-6" type="s">
<default>"237,51,59"</default>
<summary>Preset 6 - Rouge</summary>
</key>
<key name="preset-6" type="s">
<default>"230,45,66"</default>
<summary>Preset 6 - Rouge (#e62d42)</summary>
</key>
<key name="preset-7" type="s">
<default>"246,97,81"</default>
<summary>Preset 7 - Rose</summary>
</key>
<key name="preset-7" type="s">
<default>"213,97,153"</default>
<summary>Preset 7 - Rose (#d56199)</summary>
</key>
<key name="preset-8" type="s">
<default>"145,65,172"</default>
<summary>Preset 8 - Violet</summary>
</key>
<key name="preset-8" type="s">
<default>"145,65,172"</default>
<summary>Preset 8 - Violet (#9141ac)</summary>
</key>
<key name="preset-9" type="s">
<default>"119,118,123"</default>
<summary>Preset 9 - Gris ardoise</summary>
</key>
<key name="preset-9" type="s">
<default>"111,131,150"</default>
<summary>Preset 9 - Gris ardoise (#6f8396)</summary>
</key>
<!-- Mode master slider (pour évolutions futures) -->
<key name="master-mode" type="s">

View File

@@ -521,18 +521,19 @@ class KeyboardRGBIndicator extends PanelMenu.Button {
/**
* Trouve la couleur accent GNOME la plus proche d'une couleur RGB
* Couleurs officielles GNOME (version corrigée)
*/
_rgbToGnomeAccent(r, g, b) {
const colors = {
blue: { r: 53, g: 132, b: 228 }, // Bleu GNOME
teal: { r: 51, g: 209, b: 122 }, // Turquoise
green: { r: 87, g: 227, b: 137 }, // Vert
yellow: { r: 246, g: 211, b: 45 }, // Jaune
orange: { r: 255, g: 120, b: 0 }, // Orange
red: { r: 237, g: 51, b: 59 }, // Rouge
pink: { r: 246, g: 97, b: 81 }, // Rose
purple: { r: 145, g: 65, b: 172 }, // Violet
slate: { r: 119, g: 118, b: 123 } // Gris ardoise
blue: { r: 53, g: 132, b: 228 }, // Bleu GNOME #3584e4
teal: { r: 33, g: 144, b: 164 }, // Turquoise #2190a4
green: { r: 58, g: 148, b: 74 }, // Vert #3a944a
yellow: { r: 200, g: 136, b: 0 }, // Jaune #c88800
orange: { r: 237, g: 91, b: 0 }, // Orange #ed5b00
red: { r: 230, g: 45, b: 66 }, // Rouge #e62d42
pink: { r: 213, g: 97, b: 153 }, // Rose #d56199
purple: { r: 145, g: 65, b: 172 }, // Violet #9141ac
slate: { r: 111, g: 131, b: 150 } // Gris ardoise #6f8396
};
let minDistance = Infinity;
@@ -835,11 +836,17 @@ class KeyboardRGBIndicator extends PanelMenu.Button {
* Applique l'état actuel au matériel (au démarrage)
*/
_applyCurrentState() {
log('[ASUS RGB] Initialisation au démarrage - forçage de l\'état sauvegardé');
// Toujours écrire brightness
Backend.writeBrightness(this._currentBrightnessLevel);
if (this._currentBrightnessLevel > 0) {
Backend.writeRGB(this._currentR, this._currentG, this._currentB, this._currentMasterGain);
}
// TOUJOURS écrire RGB, même si brightness = 0
// Cela garantit que le contrôleur RGB est initialisé dans un état connu
// Particulièrement important pour contrer les réinitialisations firmware au boot
Backend.writeRGB(this._currentR, this._currentG, this._currentB, this._currentMasterGain);
log(`[ASUS RGB] État initial appliqué : Brightness=${this._currentBrightnessLevel}, RGB=(${this._currentR},${this._currentG},${this._currentB}), Master=${this._currentMasterGain}%`);
}
/**