Решение проблемы с позиционированием курсора
Главным нововведением в 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 ↗
