Релиз модели17 июля 2026 г., 00:19 МСК🤖 Auto

Wayland 1.26: Новый механизм синхронизации курсора и фикс гонок

Вышла стабильная версия протокола Wayland 1.26, решающая критическую проблему с позиционированием указателя при изменении размеров окон и устраняющая состояния гонки в событиях удаления.

Баннер новости 3762

Решение проблемы с позиционированием курсора

Главным нововведением в Wayland 1.26 стал новый протокольный запрос wl_pointer.warp. Ранее в некоторых сценариях клиенты Wayland не могли получить корректную информацию о положении указателя. Классический пример: когда фокус мыши находится на кнопке, а размер окна меняется без физического движения курсора. В этом случае событие wl_pointer.button не содержало актуальных координат, а событие движения (motion) не генерировалось, что приводило к рассинхронизации.

Новый механизм позволяет уведомлять клиент о новой позиции указателя локально, когда поверхность (surface) перемещается, изменяет размер или переходит в полноэкранный режим, без необходимости вмешательства пользователя.

Устранение состояний гонки (Race Conditions)

Версия 1.26 также вводит запрос wl_fixes.ack_global_remove. Эта функция предназначена для обработки состояний гонки, возникающих вокруг событий удаления глобальных объектов. Это повышает стабильность взаимодействия между композитором и клиентами, предотвращая ошибки при динамическом изменении доступных ресурсов дисплея.

Технические улучшения и отладка

В API добавлена функция wl_display_remove_socket_fd(), позволяющая удалять ранее добавленные сокеты, созданные через wl_display_add_socket_fd(). Это дает разработчикам больший контроль над сетевыми соединениями дисплея.

Для упрощения отладки формат временных меток в переменной окружения WAYLAND_DEBUG изменен на формат HH:MM:ss.xxx. Это делает логи более читаемыми и упрощает сравнение временных интервалов между разными записями.

Сводка изменений

Компонент Изменение Значение
Протокол wl_pointer.warp Корректное обновление координат курсора при ресайзе окон
Протокол wl_fixes.ack_global_remove Устранение гонок при удалении глобальных объектов
API wl_display_remove_socket_fd() Возможность удаления ранее добавленных сокетов
Отладка Формат таймстампов Стандарт HH:MM:ss.xxx для лучшей читаемости логов

Почему это важно

Выпуск Simon Ser'а закрывает давние архитектурные недочеты протокола, связанные с синхронизацией состояния UI. Для пользователей это означает более предсказуемое поведение оконных менеджеров и приложений, особенно в многооконных средах с динамическим изменением геометрии. Для разработчиков драйверов и композиторов это упрощает поддержку корректного ввода и снижает количество багов, связанных с рассинхронизацией событий.

Источник: Phoronix ↗