Le suivi du focus laissait les injections app-controlled actives lors d'une
perte de focus réelle (fermeture de la fenêtre courante, retour à un bureau
vide). On corrige la détection sur toute la chaîne :
- FocusService: un app_id vide est désormais traité comme un unfocus réel
(et non un focus transitoire ignoré), ce qui stoppe les injections liées
à l'application.
- Sway: on ignore les events 'new' (pas un changement de focus) et on relit
le focus courant sur un event 'title' non focused.
- WlrForeignToplevelBackend: suit _current_handle, le clear sur stop() et
émet un FocusEvent vide quand le toplevel actuellement focus se ferme.
Tests: test_focus_service + test_focus_watcher (67) OK; lot feature
historique (295) OK.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>