Window Activation
Как приложение получает фокус в Wayland
В X11 окно могло «захватить» внимание само; в Wayland это невозможно. Приложение может лишь получить фокус, если композитор одобрит запрос. Для этого используется протокол XDG Activation.
- Приложение-источник (например, мессенджер) запрашивает у композитора токен активации.
- Токен передаётся целевому приложению через переменную окружения
XDG_ACTIVATION_TOKEN
или полеactivation-token
в DBus. - Получив токен, приложение просит композитор активировать своё окно.
- Композитор проверяет подлинность: наличие токена, серийный номер события, ID приложения и т.д. При сомнении запрос отклоняется.
Готовые решения в KDE/Qt
QWindow::requestActivate()
сама использует токен из окружения или запрашивает новый.OpenUrlJob
,ApplicationLauncherJob
,KDBusService
уже умеют работать с токенами.
Благодаря этому большинство KDE-приложений работают без изменений.
Почему X11 не идеален
У KWin-X11 была «защита от кражи фокуса», но она опиралась на эвристики и могла быть обойдена.
Тестируем правильность
В свежем KWin включите «Extreme»-режим предотвращения кражи фокуса: окно поднимется только при валидном токене. За последние дни исправлены:
- Dolphin терял токен при новом запуске;
- KRunner, Kickoff и прочие плазмоиды не запрашивали токен;
- LayerShell-Qt теперь читает переменную и запрашивает активацию при показе;
- привилегированные клиенты (Plasma, KGlobalAccel) могут получать токены;
- нажатия модификаторов больше не считаются «пользовательским взаимодействием».
Спецификация DBusRunner получила метод SetActivationToken
, который теперь используют Baloo и KClock для корректного открытия файлов в уже запущенных окнах.
Комментарии (124)
- Пользователи рады, что Wayland запрещает приложениям «воровать» фокус, в отличие от X11/macOS/Windows, где авто-обновления и всплывающие окна прерывают работу.
- Некоторые жалуются: из-за новых правил пароли и другие важные диалоги прячутся под окнами, пока не всё ПО перейдёт на XDG Activation.
- Дискуссия о том, кто должен решать передачу фокуса: само приложение, оконный менеджер или пользователь.
- Название «Window Activation» ввело в заблуждение: многие ждали статью о лицензировании Windows.