Pipeline
XDragMover läuft als Hintergrund-App in der Menüleiste und installiert über die Quartz-Event-Services-API einen systemweiten Event-Monitor, der Modifikatortasten und Mausstatus beobachtet. Wird eine passende Geste erkannt, ermittelt die App das Zielfenster über die macOS-Accessibility-API und steuert dessen Position bzw. Größe direkt an.
Eine gemeinsame AppSettings-Schicht (auf Basis von
UserDefaults) speist Modifikator, Verweildauer und Ausschlussmuster
live in jedes Tap-/Controller-Paar ein — Änderungen in den Einstellungen wirken
sofort, ohne Neustart. Ein StatusMenuController stellt das
Menüleisten-Symbol sowie die Einstellungs-/Debug-Fenster rund um diese
Kernpipeline bereit.
Die Stufen im Detail
- Globaler Event-Monitor. Ein Quartz-Event-Services-Tap beobachtet Modifikator-Flags sowie Maustasten-/Bewegungsereignisse systemweit, nicht nur innerhalb der eigenen Fenster.
- Event Tap.
WindowMoveEventTap/WindowResizeEventTap/FocusFollowsMouseEventTapvergleichen eingehende Ereignisse mit dem konfiguriertenGestureModifier(beliebige Kombination aus Command/Option/Control/Shift außer Shift allein) und leiten passende Ereignisse an einen testbaren Controller weiter. - Controller.
WindowMoveController/WindowResizeControllerermitteln, welches Fenster sich unter dem Mauszeiger befindet, prüfen es gegen die regex-basierte Ausschlussliste (abgeglichen mit dem Namen der besitzenden App) und verfolgen — falls nicht ausgeschlossen — die Mausbewegung für die Dauer der Geste. - Accessibility-API. Positions- und Größenänderungen werden direkt über
AXUIElement-Attribute (AXWindowHandling) angewendet — derselbe Mechanismus, den die Bedienungshilfen-Berechtigung in den Systemeinstellungen absichert. - Zielfenster. Das verschobene oder vergrößerte Fenster gehört zu der App, die sich gerade unter dem Mauszeiger befindet — XDragMover funktioniert einheitlich mit allen gängigen macOS-Apps, ohne app-spezifische Integration.
Berechtigungen
Da systemweit Eingabeereignisse beobachtet und Fenster fremder Apps neu positioniert werden, benötigt XDragMover die Bedienungshilfen-Berechtigung (Systemeinstellungen → Datenschutz & Sicherheit → Bedienungshilfen), die beim ersten Start einmalig erteilt wird. Weitere besondere Berechtigungen, Kernel-Extensions oder Hintergrunddienste werden nicht verwendet.