3.4.0 2026-07-13
Добавлено
- Локализация на немецкий, русский и французский языки. Интерфейс XDragMover (настройки, строка меню, предупреждения) теперь следует языку системы через String Catalog; для любого другого языка используется английский по умолчанию.
Исправлено
- Удаление шаблона на вкладке настроек «Исключённые окна» могло привести к сбою приложения, если это был не последний элемент списка — устаревший индекс массива, застрявший в текстовом поле другой, всё ещё видимой строки. Воспроизведено вживую и исправлено.
3.3.1 2026-07-13
Изменено
- Идентификатор бандла изменён с плейсхолдера
com.example.XDragMoverнаde.xdragmover(de.xdragmover.testsдля тестовой цели) — форма обратного DNS собственного домена проекта, xdragmover.de. Тем, у кого установлена предыдущая сборка, потребуется один раз заново предоставить разрешение специальных возможностей, поскольку macOS привязывает это разрешение к идентификатору бандла.
Исправлено
make dmgне удавалось подписать контейнер.dmgна GitLab Runner («The following argument was not expected: --timestamp»), потому что его неинтерактивный PATH разрешал другой, не связанный с Apple бинарник с именемcodesignраньше настоящего — теперь явно вызывается/usr/bin/codesign, полностью минуя разрешение PATH.
3.3.0 2026-07-13
Добавлено
- Щелчок средней кнопкой мыши по значку приложения в Dock открывает его новое окно/копию (US-16). По умолчанию выключено; переключается в Настройки → Жесты → «Щелчок средней кнопкой по значку в Dock для нового окна».
Изменено
- Восстановлен значок приложения (Dock/Finder/бандл
.app), с новым дизайном (assets/logo.png) вместо удалённого в версии 3.1.0 из-за опасений по товарным знакам. - Релизные сборки теперь подписываются платной идентичностью «Developer ID Application», нотариально заверяются (notarized) и получают степлер-тикет (stapled) — компьютер, на котором это приложение ещё никогда не запускалось, больше не видит предупреждение Gatekeeper «неопознанный разработчик». См. раздел «Notarization» в
DEVELOPMENT.md.
Исправлено
- Щелчок средней кнопкой по значку Finder в Dock при уже запущенном Finder (то есть практически всегда) полностью не срабатывал с ошибкой «Приложение «Finder.app» не может быть открыто.» вместо открытия нового окна (US-16). Щелчок средней кнопкой по значку уже запущенного приложения в Dock теперь напрямую нажимает пункт меню «New Window» этого приложения через Accessibility API, если он есть (охватывает Finder и большинство оконных приложений, например iTerm2), вместо попытки принудительно создать новый экземпляр; приложения без такого пункта меню (например, приложения на основе документов вроде TextEdit) по-прежнему открывают новый экземпляр как раньше.
- Щелчок средней кнопкой по значку iTerm2 в Dock создавал целиком новый тяжёлый процесс (собственный демон оболочки/сессии) на каждый клик вместо простого нового окна в уже открытом приложении (US-16); исправлено тем же нажатием пункта меню «New Window», описанным выше.
- Щелчок средней кнопкой по значку в Dock мог оставить открытым на экране собственное контекстное меню значка Dock рядом с новым окном/копией (US-16); теперь щелчок средней кнопкой поглощается, когда эта функция на него реагирует.
3.2.0 2026-07-11
Добавлено
- Опциональная проверка обновлений (Настройки → Общие → «Проверить обновления», по умолчанию выключена). При включении проверяет публичный репозиторий релизов на наличие новой версии через 5 минут после запуска, а затем раз в день; при обнаружении показывает диалог с кнопкой «Скачать», ведущей прямо к новому
.dmg.
3.1.0 2026-07-09
Изменено
- Временно удалён собственный значок приложения, добавленный в версии 3.0.0 (его дизайн включал силуэт логотипа Apple — возможная проблема с товарным знаком); приложение теперь снова использует стандартный автоматически сгенерированный значок macOS, пока не будет готов новый дизайн.
3.0.0 2026-07-09
Добавлено
- Исключённые окна (настройки): список regex-шаблонов, сверяемых с именем приложения — любое приложение из списка никогда не может быть перемещено или изменено в размере. Записи обычно добавляются через «Добавить из открытых окон…», средство выбора со списком текущих открытых приложений, которое создаёт точный шаблон (например,
^Calculator$) для выбранного приложения; каждый шаблон остаётся редактируемым как обычный текст («Добавить шаблон» добавляет пустую строку), недопустимые regex-выражения показываются красным, ничего не блокируя. - Отладочная консоль: кнопка «Блокировка прокрутки». Выключено (по умолчанию, сохраняется) — консоль, как и раньше, всегда прокручивается к самой новой строке при поступлении новых записей. Включено — позволяет свободно прокручивать историю, не будучи каждый раз возвращённым вниз при появлении новой строки лога.
- «Фокус следует за мышью» теперь при первом включении в настройках показывает одноразовое предупреждение («Функция «Фокус следует за мышью» экспериментальна…» с флажком «Больше не показывать»), объясняющее, что функция полагается на недокументированный механизм macOS и может работать нестабильно в некоторых приложениях. README теперь тоже явно указывает на это, а не только подразумевает. Вкладка «Фокус следует за мышью» дополнительно показывает это предупреждение постоянно (не только один раз), так что оно видно при каждом открытии вкладки, а не только при первом использовании.
Изменено
- Проект переименован: KDEMoverSizerMacOS → XDragMover. Затрагивает слаг/remote проекта GitLab, проект/цели/схему Xcode, оба идентификатора бандла (теперь
com.example.XDragMover/...Tests) и все ссылки в исходном коде/документации/скриптах. Как и при предыдущем переименовании (2.0.0), изменение идентификатора бандла означает, что существующие установки теряют сохранённые настройки (новый доменUserDefaults) и должны один раз заново предоставить разрешение специальных возможностей после обновления. Ломающее изменение для существующих установок, поэтому при релизе — увеличение мажорной версии. - Значок приложения заменён на новый дизайн, объединяющий радужный силуэт логотипа Apple, «X» от X.Org (из
assets/X.Org_Logo.png) и крест из стрелок перемещения, перегенерирован во всех размерахmac-idiom (16–1024 px). - Окно настроек реорганизовано в вкладки (Общие, Жесты, Исключённые окна, Фокус следует за мышью, О программе) через сегментированный элемент управления вместо одного длинного прокручиваемого списка всех разделов друг под другом.
- «О XDragMover» (строка меню) теперь открывает вкладку «О программе» окна настроек (последняя вкладка) вместо отдельного модального диалога — кнопка «Показать отладочную консоль» переехала вместе с ней. Клик по «О программе» при уже открытых настройках на другой вкладке переключает на вкладку «О программе», вместо того чтобы оставаться на той вкладке, что была показана.
- Лицензирование: добавлены
LICENSE(GPLv3) иLICENSING.md, объясняющие схему двойного лицензирования, которая сохраняет возможность будущего релиза в Apple App Store; Ральф Хартманн указан как автор в README и в строке авторских прав приложения.
Исправлено
- Кнопка «Блокировка прокрутки» отладочной консоли выглядела одинаково независимо от состояния (простой нейтрально-серый фон), менялась только крошечная иконка замка — легко было не заметить, из-за чего кнопка выглядела неактивной даже во включённом состоянии. Теперь она заполняется акцентным цветом при блокировке, как это делают другие переключаемые кнопки панели инструментов macOS для обозначения активного/нажатого состояния.
- Окно настроек: первый элемент («Запускать при входе в систему») и кнопки «Отмена»/«OK» со временем, по мере добавления новых разделов, сдвигались вплотную к верхнему/нижнему краю окна, поскольку всё делило один нескроллящийся стек фиксированной высоты. Разделы настроек теперь прокручиваются независимо внутри окна, а «Отмена»/«OK» закреплены в постоянно полностью отбитом отступами подвале под разделителем — оба конца сохраняют предусмотренный отступ независимо от того, сколько содержимого выше.
- Ползунок задержки для «Фокус следует за мышью» было трудно точно установить на нужное значение — его шаг 10 мс упаковывал 95 дискретных позиций в узкий элемент перетаскивания, легко было проскочить нужное значение. Добавлен
Stepperрядом с ним для точной регулировки кликом или удержанием с шагом ±10 мс; ползунок остаётся для быстрого грубого позиционирования. - Перемещение/изменение размера (и «Фокус следует за мышью») молча оставались неработающими на весь сеанс работы, если разрешение специальных возможностей ещё не было предоставлено именно в момент запуска — частая гонка с системным запросом, и гарантированная после любого изменения идентификатора бандла (например, переименования выше), поскольку это всегда требует заново предоставить доступ с нуля. Обработчики событий пытались запуститься только один раз, при старте; предоставление доступа чуть позже никогда не замечалось, хотя собственный индикатор статуса окна отладки корректно показывал «предоставлено».
AccessibilityPermissionManagerтеперь сообщает об изменениях доверия (onTrustedChange), и приложение при этом повторно пытается запустить каждый включённый обработчик — предоставление доступа в любой момент теперь заставляет перемещение/изменение размера/«Фокус следует за мышью» работать немедленно, без перезапуска.
2.2.0 2026-07-06
Добавлено
- «Завершить» теперь запрашивает подтверждение («Завершить KDEMoverSizerMacOS?» / «Перемещение окон, изменение размера и «Фокус следует за мышью» перестанут работать до повторного запуска.» с кнопками «Завершить»/«Отмена») вместо немедленного завершения — случайное нажатие «Завершить» или сочетания клавиш
⌘Qбольше не убивает молча перемещение/изменение размера окон без возможности отмены.
2.1.0 2026-07-06
Добавлено
- Настоящий значок приложения (Dock/Finder/бандл
.app):KDEMoverSizerMacOS/Assets.xcassets/AppIcon.appiconset, подключённый в проект Xcode черезASSETCATALOG_COMPILER_APPICON_NAME, сгенерированный во всех требуемых размерахmac-idiom (16–1024 px) изassets/KDE_Window-Sizer-for-macOS_256px.png. Раньше у приложения вообще не было собственного значка. Значок пункта статуса в строке меню (SF Symbol) не изменился.
2.0.0 2026-07-06
Изменено
- Проект переименован: KDESizeMoverMac → KDEMoverSizerMacOS. Затрагивает слаг/remote проекта GitLab, проект/цели/схему Xcode, оба идентификатора бандла и все ссылки в исходном коде/документации/скриптах. Изменение идентификатора бандла означает, что существующие установки теряют сохранённые настройки (новый домен
UserDefaults) и должны один раз заново предоставить разрешение специальных возможностей после обновления — одноразовая цена переименования, а не регрессия. Ломающее изменение для существующих установок, поэтому увеличение мажорной версии.
1.1.1 2026-07-06
Исправлено
- Окна «Настройки» и «Журнал отладки» не всегда надёжно выходили на передний план — как приложение только для строки меню (
.accessory), KDEMoverSizerMacOS никогда не является активным приложением, поэтому одногоmakeKeyAndOrderFrontбыло недостаточно, и любое из окон могло остаться позади реально активного другого приложения. Оба теперь сначала вызываютNSApp.activate(ignoringOtherApps: true), как и потребовавшееся по той же причине исправление для диалога «О программе». - Значок в Dock теперь появляется именно тогда, когда открыто окно «Настройки» или «Журнал отладки» (в дополнение к постоянному показу при запуске с
--debug), вместо того чтобы никогда не появляться вне режима--debug. Это также означает, что клик по значку Dock, пока он отображается, снова выводит настройки на передний план, точно так же, как это уже делает перезапуск приложения.
1.1.0 2026-07-06
Добавлено
- Настоящее окно настроек (US-8): «Запускать при входе в систему», включение/выключение «Фокус следует за мышью» (US-4) и его задержка (частично US-5) теперь все изменяемы через полноценный диалог настроек, а не только через значения по умолчанию в коде. Сохраняется через
UserDefaults(переживает удаление приложения) и версионируется для будущих миграций. - Кнопка «Показать отладочную консоль» в диалоге «О программе», позволяющая открыть окно журнала отладки без запуска с
--debug. - Смягчение для приложений (подтверждено: Firefox), которые сами поднимают себя на передний план после того, как «Фокус следует за мышью» передаёт им ввод — см.
USER_STORIES.mdи раздел «Optional: yabai-assisted window-order correction» вDEVELOPMENT.md. BACKLOG.mdи US-9 (переключатель окон) добавлены вUSER_STORIES.md.- Независимые переключатели в настройках для перемещения окна (US-1) и изменения размера окна (US-2), позволяющие отключить каждый жест по отдельности.
- Настраиваемая клавиша-модификатор для перемещения/изменения размера (
GestureModifier): любая комбинация Command/Option/Control/Shift, кроме одного Shift, заменяющая ранее жёстко закодированный⌘. По умолчанию остаётся Command. - Кнопки OK/Отмена в окне настроек: OK закрывает его, сохраняя изменения; Отмена возвращает каждую настройку (включая «Запускать при входе в систему») к состоянию на момент открытия диалога.
- Новые значения по умолчанию: «Фокус следует за мышью» теперь выключен по умолчанию (был включён); перемещение и изменение размера остаются включёнными по умолчанию.
DEVELOPMENT.md: политика «Changing existing tests» и новыйTEST_CHANGELOG.md, отслеживающий именно изменения существующих тестов (отдельно от этого файла, который охватывает только видимое пользователю поведение).- Повторный запуск приложения, пока оно уже работает (например, повторный двойной клик в Finder/Launchpad), теперь показывает окно настроек вместо бездействия (US-10).
- «Скрыть из строки меню» (US-11): пункт меню и соответствующий флажок в настройках, полностью скрывающие элемент статуса; повторный запуск приложения (US-10) — способ снова вернуть настройки и выключить его.
USER_STORIES.md: задокументирована новая, ещё не реализованная US-12 — список исключений по приложениям для «Фокус следует за мышью».
Исправлено
- Переключение «Запускать при входе в систему» из элемента строки меню больше не оставляло устаревшим флажок в диалоге настроек — окно настроек теперь пересоздаётся заново при каждом открытии, а не кэшируется на всю сессию приложения.
- Содержимое окна настроек переросло его фиксированный размер, обрезая верхнюю («Запускать при входе в систему») и нижнюю (OK/Отмена) строки вплотную к краям окна. Его рамка теперь щедро подгоняется под фактически измеренную минимальную высоту содержимого.
1.0.1 2026-07-05
Добавлено
- US-3: «Фокус следует за мышью», этап 1 — окно под курсором мыши получает настоящий ввод с клавиатуры/мыши после задержки в 150 мс, не поднимаясь над другими окнами. Реализовано через приватный/недокументированный механизм WindowServer, портированный из оконного менеджера yabai, поскольку одного публичного атрибута
AXFocusedнедостаточно для перенаправления ввода между приложениями; при недоступности этого механизма используется откат наAXFocused.
Исправлено
- «Фокус следует за мышью» не всегда надёжно нацеливался на правильное окно, если у соответствующего приложения уже было открыто несколько окон — восстановлена обработка переключения окон внутри одного приложения из yabai, утраченная при первоначальном портировании.
- Задержка активации «Фокус следует за мышью» снижена с до 350 мс до менее 200 мс (задержка 150 мс + интервал опроса 20 мс, оба снижены с 300 мс/50 мс).
- Исправлены устаревшие заметки в
USER_STORIES.md(в списке пунктов строки меню отсутствовал «О программе»; пробел «не приостанавливается при открытом меню» не упоминал US-3).
1.0.0 2026-07-05
Добавлено
- Пункт меню «О программе»: модальный диалог с именем приложения, версией, номером сборки и авторскими правами — не общая стандартная панель AppKit «О программе», которая, как показало тестирование, ненадёжно выходит на передний план для приложения только строки меню (
.accessory).
Исправлено
Info.plistтеперь считываетCFBundleShortVersionString/CFBundleVersionиз настроек сборки вместо жёстко закодированных устаревших значений.
0.1.8 2026-07-05
Никаких функциональных изменений (только увеличение версии).
0.1.7 2026-07-05
Добавлено
- US-1: перемещение любого окна с помощью
⌘+перетаскивание левой кнопкой. - US-2: изменение размера любого окна с помощью
⌘+перетаскивание правой кнопкой, привязанное к ближайшему углу. - Элемент статуса в строке меню (Запускать при входе в систему, Завершить) и скрытый значок в Dock вне режима
--debug. - Отладочное журналирование событий начала/окончания перемещения/изменения размера (а для изменения размера — какой угол был захвачен).
- Цели
make install,make uninstallиmake dmg.
Исправлено
- Подпись Xcode: выбрана настоящая Apple Development Team для автоматической подписи.
- Приложение неожиданно завершалось при переключении «Запускать при входе в систему».
- Приложение неожиданно завершалось при взаимодействии с собственным выпадающим меню элемента строки меню (не в режиме отладки).
- Отзывчивость изменения размера: пропуск избыточных вызовов Accessibility API и объединение обновлений перетаскивания в основном run loop.
make dmg: смонтированный том был невидим в Finder (сначала из-за-nobrowse, затем из-за пользовательской-mountpointвне/Volumes/).
0.1.6 2026-07-05
Исправлено
- Подпись кода пакета: самоподписанный сертификат не удовлетворяет проверкам разрешений специальных возможностей TCC; переключено на подпись на основе команды разработчика (Team).
0.1.5 2026-07-05
Никаких функциональных изменений (только увеличение версии).
0.1.4 2026-07-05
Добавлено
- CI: сборка пакета при каждом push в
dev, версия по SHA коммита.
Документация
- Задокументирована App Translocation как причина повторяющихся запросов разрешений.
0.1.3 2026-07-05
Исправлено
- Опубликованные пакеты при каждой установке заново запрашивали разрешение специальных возможностей.
0.1.2 2026-07-05
Исправлено
- Сборка
make package/make releaseзавершалась неудачей из-за проблемы с очисткой временного каталога.
0.1.1 2026-07-05
Добавлено
- Начальный каркас проекта: запрос разрешения специальных возможностей, окно отладки, определение окна под курсором мыши, модульные тесты.
Makefile(build/test/clean/all).- Рабочий процесс ветвления git
main/dev/feature/bugfixсо скриптовым процессом релиза (make release). - Пайплайн GitLab CI (тест при push в
dev, релиз при push вmain). make runи флаг--debug.
Исправлено
- Повторный запрос разрешения специальных возможностей при каждой пересборке/запуске.
- Побочные эффекты запуска (запрос разрешения, обработчики событий), происходившие, когда приложение размещалось в XCTest.