# Correction: Listeners pynput zombies dans la barre système

## Problème Identifié

Après avoir fermé l'application, des icônes de clavier restaient affichées dans la barre système (system tray).

![Icônes zombies](capture_ecran_icones_clavier.png)

## Cause

Les listeners `pynput` (pour capturer les événements clavier/souris) n'étaient **pas arrêtés proprement** lors de la fermeture de l'application.

### Analyse

1. `EventCapture` démarre des listeners pynput :
   - `mouse.Listener` pour la souris
   - `keyboard.Listener` pour le clavier

2. Ces listeners créent des threads et des hooks système

3. Lors de la fermeture de l'application, la méthode `shutdown()` :
   - ✅ Arrêtait l'orchestrateur
   - ✅ Sauvegardait les données
   - ❌ **N'arrêtait PAS** `event_capture.stop()`

4. Résultat : Les listeners restaient actifs en arrière-plan

## Solution

Ajout de l'arrêt explicite de la capture d'événements dans `shutdown()` :

```python
def shutdown(self):
    """Arrête proprement l'application."""
    print("🔄 Arrêt en cours...")
    
    # Arrêter la capture d'événements (IMPORTANT pour libérer les listeners pynput)
    if self.orchestrator and hasattr(self.orchestrator, 'event_capture'):
        print("  - Arrêt de la capture d'événements...")
        self.orchestrator.event_capture.stop()
    
    # Arrêter l'orchestrateur
    if self.orchestrator_thread:
        print("  - Arrêt de l'orchestrateur...")
        self.stop_orchestrator()
    
    # ... reste du code ...
```

## Nettoyage des Processus Zombies

Pour nettoyer les processus déjà en cours :

```bash
# Tuer tous les processus Python de l'application
pkill -f "python.*main.py"

# Vérifier qu'ils sont bien arrêtés
ps aux | grep python | grep geniusia
```

## Fichiers Modifiés

- ✅ `geniusia2/main.py` - Méthode `shutdown()` corrigée

## Test

1. Lancez l'application :
```bash
cd geniusia2
./run.sh
```

2. Fermez l'application (Ctrl+C ou bouton Stop)

3. Vérifiez la barre système :
   - ✅ Les icônes de clavier doivent disparaître
   - ✅ Aucun processus Python ne doit rester actif

4. Vérifiez les processus :
```bash
ps aux | grep python | grep geniusia
# Résultat attendu: Aucun processus
```

## Ordre d'Arrêt Correct

1. **Arrêt de la capture d'événements** → Libère les listeners pynput
2. **Arrêt de l'orchestrateur** → Arrête la boucle cognitive
3. **Sauvegarde des données** → Persiste l'état
4. **Fermeture de Qt** → Quitte l'interface graphique

## Prévention

Pour éviter ce problème à l'avenir :

1. Toujours appeler `event_capture.stop()` avant de fermer
2. Utiliser un gestionnaire de contexte (`with`) si possible
3. Gérer proprement les signaux (SIGINT, SIGTERM)
4. Tester la fermeture de l'application régulièrement

## Impact

Cette correction garantit :
- ✅ Arrêt propre de tous les listeners système
- ✅ Pas de processus zombies
- ✅ Pas d'icônes résiduelles dans la barre système
- ✅ Libération correcte des ressources système

---

**Date**: 2025-11-22  
**Statut**: ✅ Corrigé  
**Priorité**: Haute (fuite de ressources)
