Pipeline
XDragMover s'exécute comme une application d'arrière-plan de la barre des menus qui installe un moniteur d'événements global via l'API Quartz Event Services, surveillant l'état des touches de modification et de la souris à l'échelle du système. Lorsqu'un geste valide est détecté, elle résout la fenêtre cible via l'API Accessibilité de macOS et pilote directement sa position ou son cadre.
Une couche AppSettings partagée (adossée à UserDefaults)
alimente en direct le modificateur actif, le délai d'immobilité et les motifs
d'exclusion dans chaque paire tap/contrôleur, si bien que les changements dans les
réglages s'appliquent immédiatement — aucun redémarrage requis. Un
StatusMenuController fournit l'élément de la barre des menus et les
fenêtres Réglages/Débogage autour de ce pipeline central.
Les étapes en détail
- Moniteur d'événements global. Un tap Quartz Event Services observe les indicateurs de touches de modification ainsi que les événements de bouton/mouvement de la souris pour tout le système, pas seulement les fenêtres de cette application.
- Event Tap.
WindowMoveEventTap/WindowResizeEventTap/FocusFollowsMouseEventTapcomparent chacun les événements entrants auGestureModifierconfiguré (toute combinaison de Command/Option/Control/Shift sauf Shift seule) et transmettent les événements valides à un contrôleur testable. - Contrôleur.
WindowMoveController/WindowResizeControllerdéterminent quelle fenêtre se trouve sous le curseur, la vérifient par rapport à la liste d'exclusion basée sur des regex (comparée au nom de l'application propriétaire) et, si elle n'est pas exclue, suivent les déplacements de la souris pendant toute la durée du glissement. - API Accessibilité. Les changements de position et de taille sont appliqués directement via les attributs
AXUIElement(AXWindowHandling), le même mécanisme que protège l'autorisation Accessibilité des Réglages Système. - Fenêtre cible. La fenêtre déplacée ou redimensionnée appartient à l'application qui se trouve sous le curseur — XDragMover fonctionne de manière uniforme avec toutes les applications macOS standard, sans intégration spécifique par application.
Autorisations
Parce qu'elle observe les événements d'entrée à l'échelle du système et repositionne des fenêtres appartenant à d'autres applications, XDragMover nécessite l'autorisation Accessibilité (Réglages Système → Confidentialité et sécurité → Accessibilité), accordée une fois au premier lancement. Aucun autre droit spécial, extension du noyau ou démon d'arrière-plan n'est utilisé.