Список изменений

Все значимые изменения в XDragMover, релиз за релизом.

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 теперь тоже явно указывает на это, а не только подразумевает. Вкладка «Фокус следует за мышью» дополнительно показывает это предупреждение постоянно (не только один раз), так что оно видно при каждом открытии вкладки, а не только при первом использовании.

Изменено

  • Проект переименован: KDEMoverSizerMacOSXDragMover. Затрагивает слаг/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

Изменено

  • Проект переименован: KDESizeMoverMacKDEMoverSizerMacOS. Затрагивает слаг/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.

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