Обзор архитектуры

Как XDragMover превращает жест «модификатор+клик» в перемещённое или изменённое в размере окно, используя исключительно публичные и слегка приватные API macOS.

Конвейер

XDragMover работает как фоновое приложение строки меню, устанавливающее системный монитор событий через API Quartz Event Services, отслеживающий состояние клавиш-модификаторов и мыши по всей системе. При обнаружении подходящего жеста приложение определяет целевое окно через macOS Accessibility API и напрямую управляет его положением или размером.

Глобальный монитор событий Quartz Event Services
Event Tap Обработчики Move / Resize / Focus
Контроллер Логика жестов и исключений
Accessibility API Позиция/размер AXUIElement
Целевое окно Окно любого другого приложения

Общий слой AppSettings (на основе UserDefaults) в реальном времени передаёт активный модификатор, задержку и шаблоны исключений в каждую пару tap/контроллер — изменения в настройках применяются немедленно, без перезапуска. StatusMenuController предоставляет элемент строки меню и окна настроек/отладки вокруг этого основного конвейера.

Этапы подробно

Разрешения

Поскольку приложение отслеживает события ввода по всей системе и перемещает окна, принадлежащие другим приложениям, XDragMover требует разрешение специальных возможностей (Системные настройки → Конфиденциальность и безопасность → Специальные возможности), предоставляемое один раз при первом запуске. Никакие другие особые разрешения, расширения ядра или фоновые демоны не используются.

← Назад на главную