Le controleur passe par les contrats, la duplication disparait

This commit is contained in:
2026-08-23 18:19:25 +02:00
parent 3c3ea4444d
commit dcec1e61d0
5 changed files with 61 additions and 87 deletions
+10 -3
View File
@@ -31,6 +31,7 @@ from pynput import keyboard
from controller import ZonzaController
from core import CONFIG, validate_config
from interface import classe_overlay_pour
from moteur import choisir_transcripteur, detecter_moteur
from systeme import choisir_systeme
_STATE_TITLES = {
@@ -43,7 +44,7 @@ _STATE_TITLES = {
class ZonzaApp(NSObject):
"""Délégué applicatif : status item + menu + hotkey + contrôleur."""
def init(self):
def initWithTranscripteur_systeme_(self, transcripteur, systeme):
self = super().init()
if self is None:
return None
@@ -51,7 +52,7 @@ class ZonzaApp(NSObject):
self._sounds_item = None
self.pulse = classe_overlay_pour().alloc().init()
self.controller = ZonzaController(
CONFIG, self.pulse, on_state=self._set_state,
CONFIG, self.pulse, transcripteur, systeme, on_state=self._set_state,
run_on_main=AppHelper.callAfter,
)
self._listener = None
@@ -140,6 +141,12 @@ def main():
return
main._lock = lock # garder le verrou vivant tant que le process vit
validate_config(CONFIG)
transcripteur = choisir_transcripteur(
nom=detecter_moteur(),
modele=CONFIG["model"],
langue=CONFIG["language"],
amorce=CONFIG["initial_prompt"],
)
# si l'Accessibilité n'est pas accordée, macOS affiche sa popup officielle
# (« Zonza souhaite contrôler cet ordinateur ») et ajoute l'app à la liste —
# bien plus fiable qu'un ajout manuel via « + » dans les Réglages.
@@ -150,7 +157,7 @@ def main():
trusted = AXIsProcessTrustedWithOptions({kAXTrustedCheckOptionPrompt: True})
print(f"[diag] accessibilité accordée : {bool(trusted)}")
app = NSApplication.sharedApplication()
delegate = ZonzaApp.alloc().init()
delegate = ZonzaApp.alloc().initWithTranscripteur_systeme_(transcripteur, systeme)
delegate.setup()
# référence gardée pour toute la vie du processus (sinon GC → icône disparaît)
main._delegate = delegate