Конвейер
XDragMover работает как фоновое приложение строки меню, устанавливающее системный монитор событий через API Quartz Event Services, отслеживающий состояние клавиш-модификаторов и мыши по всей системе. При обнаружении подходящего жеста приложение определяет целевое окно через macOS Accessibility API и напрямую управляет его положением или размером.
Общий слой AppSettings (на основе UserDefaults) в
реальном времени передаёт активный модификатор, задержку и шаблоны исключений
в каждую пару tap/контроллер — изменения в настройках применяются немедленно,
без перезапуска. StatusMenuController предоставляет элемент строки
меню и окна настроек/отладки вокруг этого основного конвейера.
Этапы подробно
- Глобальный монитор событий. Обработчик Quartz Event Services отслеживает флаги клавиш-модификаторов и события кнопок/движения мыши по всей системе, а не только в окнах этого приложения.
- Event Tap.
WindowMoveEventTap/WindowResizeEventTap/FocusFollowsMouseEventTapсравнивают входящие события с настроеннымGestureModifier(любая комбинация Command/Option/Control/Shift, кроме одного Shift) и передают подходящие события тестируемому контроллеру. - Контроллер.
WindowMoveController/WindowResizeControllerопределяют, какое окно находится под курсором, сверяют его со списком исключений на основе regex (по имени владеющего приложения) и, если оно не исключено, отслеживают смещение мыши на протяжении перетаскивания. - Accessibility API. Изменения позиции и размера применяются напрямую через атрибуты
AXUIElement(AXWindowHandling) — тот же механизм, который регулируется разрешением специальных возможностей в системных настройках. - Целевое окно. Перемещаемое или изменяемое в размере окно принадлежит тому приложению, которое находится под курсором — XDragMover работает единообразно со всеми стандартными приложениями macOS, без интеграции для каждого приложения отдельно.
Разрешения
Поскольку приложение отслеживает события ввода по всей системе и перемещает окна, принадлежащие другим приложениям, XDragMover требует разрешение специальных возможностей (Системные настройки → Конфиденциальность и безопасность → Специальные возможности), предоставляемое один раз при первом запуске. Никакие другие особые разрешения, расширения ядра или фоновые демоны не используются.