LINUX.ORG.RU

Wayland в отображает окно в рандомном месте

 


0

2

Всем привет, изучаю wayland и его клиентские h все что хотел удалось отобразить, всем доволен кроме одного НО. При первой привязке wl_buffer к wl_surface левый верхний угол нового окна оказывается в случайном месте экрана. Покопался на форумах и ни чего свежее 2014 года не нашел. Мельком просмотрел создание поверхности из композитора и привязку буфера в доках и не нашел ни чего про стартовую позицию. С форумов я понял что разработчик изначально не хотел пользователю давать абсолютные координаты и поэтому механизма нет, но то был 2014. К сожалению не смог найти ни чего посвежее. В курсе кто нибудь как это можно сделать через api wayland(желательно без использования функций weston)? P.S. Нашел костыльное решение: выделяем пустой буффер размером под все разрешение экрана, биндим его, разрушаем, а потом уже ТОЛЬКО ПЕРВЫЙ целевой буфер wl_surface_damage и wl_surface_attach с нужным сдвигом по x и y. Далее обновляем буфферы со сдвигом 0. Проверил эвенты курсора, работают правильно, ливают прямо на стыке целевого буфера. Но хотелось бы использовать сдвиг без костылей.

Ответ на: комментарий от Siborgium

Да я юзаю wl_shell_interface, мой registry_global предлагает 3 shell:

wl_shell

zxdg_shell_v6

weston_desktop_shell

Но пока я не нахожу объявлений этих интерфейсов:

extern const struct wl_interface wl_shell_interface;

Поищу, xdg это отдельный пакет? потому что прямым поиском по /usr/include не ищет (у меня микро компьютер на buildroot, так что возможно не все нужные пакеты развернуты)

Спасибо за наводку.

ivv19041994 ()
Ответ на: комментарий от ivv19041994

Посмотри вот эту тему и всю книгу в целом. Там достаточно подробно объясняется, что такое xdg shell, и с чем его едят.

Непосредственно xml с описанием протокола лежит тут, рядом с другими. Как у тебя назван пакет, я не знаю, у меня это и есть wayland-protocols.

Siborgium ★★ ()
Последнее исправление: Siborgium (всего исправлений: 2)
Ответ на: комментарий от Siborgium

Изучил весь этот учебник, хочу уточнить, вы имели в виду xdg_toplevel.move ??? Другие я не нашел в xml. И этот запрос не дает при старте аппы выбрать положение окна, а сам в обход программиста двигает окно через wl_seat (я тестил на мышке). Плюс в учебнике еще раз подчеркнуто, что им не нравится идея, когда аппа знает свое абсолютное положение.

ivv19041994 ()
Ответ на: комментарий от ivv19041994

вы имели в виду xdg_toplevel.move

Да.

И этот запрос не дает при старте аппы выбрать положение окна, а сам в обход программиста двигает окно через wl_seat (я тестил на мышке)

Да, это интерактивный move. Вы можете использовать zwlr_layer_shell, там есть overlay layer. Это расширение, но оно поддерживается любым композитором, основанным на wlroots. Для примера посмотрите, как сделан lavalauncher, файл src/layersurface.c.

Но вообще, для большинства приложений задавать координаты самим – моветон.

Siborgium ★★ ()
Последнее исправление: Siborgium (всего исправлений: 1)