Второй предварительный выпуск xfwl4, композитора Wayland для рабочего окружения Xfce, вышел – менее чем через два месяца после первого. В версии 4.21.1 появились развёртывание окна по горизонтали и вертикали, переключение между окнами одного приложения и обработка зависших программ с трёхсекундным ожиданием ответа. Отдельный пласт правок пришёлся на передачу фокуса, порядок наложения окон и совместимость с X11. В ветке 4.21.1 закрыто 27 задач, причём в анонсе оговорено, что изменений в выпуске больше, чем отражено в трекере.
Развёртывание по осям и переключение между окнами одного приложения
После первого выпуска, вышедшего , композитор стал доступен широкому кругу тестировщиков, однако нескольких привычных по Xfce возможностей в нём не было. Часть из них закрыта в 4.21.1.
Композитор Wayland – программа, совмещающая функции дисплейного сервера и оконного менеджера. Приложения сами отрисовывают свои окна в отдельные буферы, а композитор объединяет их содержимое в итоговое изображение с учётом перекрытий и прозрачности.
Наиболее заметное дополнение – развёртывание окна по горизонтали и по вертикали. Появилось и переключение между окнами одного приложения либо окна-лидера приложения (application leader), для которого предусмотрены отдельные сочетания клавиш. В июньском выпуске работал только циклический перебор всех окон, перебора в пределах приложения не было.
Пишется xfwl4 с нуля на Rust поверх библиотеки Smithay, код xfwm4 при этом не используется. Работу над композитором проект Xfce оплачивает из пожертвований.
Сенсорный экран на выбранном мониторе и автоповтор клавиш
Сенсорный экран теперь привязывается к конкретному монитору, а для указательных устройств появились поворот и отражение. В перемещении и изменении размера окна с клавиатуры заработал автоповтор: при удержании клавиши операция повторяется, а не выполняется однократно.
Фокус, порядок окон и собственные декорации приложений
Основной объём исправлений пришёлся на управление окнами. Устранены проблемы, затрагивавшие:
- передачу фокуса после сворачивания окна и после переключения рабочего места;
- режим, в котором фокус переходит к окну под указателем мыши;
- захват ввода всплывающими окнами;
- поведение модальных диалогов;
- порядок наложения окон;
- связи между родительским и дочерним окнами;
- возврат фокуса после закрытия меню окна.
Строже стали и правила, по которым определяется, какие окна допускают сворачивание и получение фокуса, а при изменении подсказок (hints) со стороны приложения набор доступных для окна операций пересчитывается. Точнее обрабатываются окна, рисующие декорации самостоятельно: кнопки серверных декораций скрываются там, где они неприменимы.
Декорации на стороне клиента (client-side decorations, CSD) – заголовок, рамка и кнопки окна, которые рисует само приложение. При декорациях на стороне сервера (SSD) их отрисовкой занимается композитор или оконный менеджер.
Совместимость с X11: WM_HINTS, подсказки Motif и override-redirect
Значки окон X11 читаются из WM_HINTS, учитываются также подсказки оконного менеджера Motif. Реализована обработка запросов X11 на восстановление окна из свёрнутого состояния. Ещё несколько исправлений затронули окна с флагом override-redirect, изменение порядка окон, обработку фокуса и удаление окон.
override-redirect – флаг окна X11, при котором оконный менеджер не оформляет окно и не управляет его размещением. Флаг применяется для выпадающих меню, всплывающих подсказок и подобных элементов интерфейса.
Сворачивание окон и три секунды на ответ зависшей программе
Окна, закреплённые на всех рабочих местах, сворачиваются и восстанавливаются одинаково на любом из них. Свёрнутое окно сохраняет сведения о том, на каком выводе оно находилось, а при восстановлении вместе с ним возвращаются дочерние окна – там, где это уместно.
Отдельно переработана реакция на зависшие программы. При запросе на закрытие окна XDG-клиенту отправляется ping, и, если ответа нет в течение трёх секунд, пользователю предлагается завершить приложение принудительно. Диалог о неотвечающем окне выводится только тогда, когда приложение всё ещё запущено.
Захват экрана через wlr-screencopy, значки и миниатюры окон
В реализации протокола захвата экрана wlr-screencopy исправлены отрисовка курсора, события damage, метки времени, смещения и переворот изображения, добавлена поддержка пиксельных форматов BGR.
Значки и миниатюры окон передаются в корректном размере, улучшено их масштабирование, исправлен разбор данных X11 из свойства _NET_WM_ICON. Внутри композитора используется единый формат ARGB32 с предумноженным альфа-каналом.
Параметр --session и сессионная шина D-Bus
Появился параметр --session, задающий команду, которая запускается при старте композитора. Если сессионная шина D-Bus в системе отсутствует, она поднимается автоматически и останавливается при завершении работы – но только в том случае, когда была запущена самим xfwl4.
Прочие правки затронули:
- протокол блокировки сеанса Wayland и отрисовку экрана блокировки;
- подавление сочетаний клавиш;
- фокус и размещение всплывающих подсказок в layer-shell;
- состояние серверных декораций;
- восстановление состояния Num Lock;
- состояние активации рабочего места.
Заключение
В 4.21.1 закрыта часть того, чего не хватало в июньской сборке: развёртывание по осям, переключение внутри приложения, предсказуемое поведение фокуса, реакция на зависшие окна. Статус проекта при этом не изменился – xfwl4 по-прежнему предварительный выпуск, и заменять им xfwm4 в повседневной работе в Xfce пока не предлагают.
Тем, кто собирает исходный код самостоятельно, стоит свериться с README: список зависимостей времени выполнения обновлён по сравнению с первым предварительным выпуском, и при более старых компонентах Xfce часть функций работать не будет.