Декорации окон Wayland

Я пишу клиент Wayland, используя только библиотеку Wayland C (wayland-client.h). Я хочу тратить как можно меньше усилий, чтобы добавить украшения окна для перемещения, изменения размера, сворачивания и закрытия окна.

Варианты, которые я вижу: а) попросить композитора нарисовать декорации окон вокруг моей поверхности Wayland (декорации на стороне сервера), или б) использовать небольшую библиотеку или код, отрезаемый для самостоятельного рисования декораций на клиенте (декорации на стороне клиента).

Какие существуют способы достижения обоих вариантов? Например, для простого примера hello_wayland, как я могу запросить декорации на стороне сервера (a) или как я могу нарисовать декорации окон в клиенте (b)? Для последнего варианта я ищу что-то вроде библиотеки Rust https://github.com/Smithay/wayland-window, но для C/C++.

1 ответ

ОБНОВЛЕНИЕ: В случае, если вы не читаете комментарии, просто хотите подчеркнуть, что протокол, изложенный в первоначальном ответе в том виде, в котором он был предложен, с тех пор был принят как нестабильный. https://github.com/wayland-project/wayland-protocols/commit/76d1ae8c65739eff3434ef219c58a913ad34e988

ОРИГИНАЛ: Прямо сейчас, нет никакого стандартного / стабильного способа сделать украшения на стороне сервера в Wayland. Сам протокол не запрещает для серверных украшений, но он, похоже, не расставил приоритеты. (Хотя, жалоба является спорной, так как протокол оболочки переопределяется для настольных компьютеров под XDG-протоколов пространства имен в любом случае.)

Очевидно, это повлияло на KDE, особенно потому, что для Plasma Shell используются серверные декорации для обеспечения согласованности тем. Люди KDE имеют расширение протокола для их реализации, называемое просто "украшения сервера " KWayland украшения сервера. Вы можете проверить этот интерфейс и использовать его, если он есть.

Более долгосрочное решение еще не найдено. Это то, с чем должна согласиться группа людей, работающих над протоколами Wayland (вероятно, XDG). Была предпринята попытка свернуть это в путевые протоколы xdg-namespaced под названием xdg-toplevel-decor. Патч в конечном итоге помечен как отмененный. Последняя попытка исправить этот протокол все еще находится в состоянии предложения - xdg-украшение.

Без серверных декораций вы застряли в рисовании собственных декораций (а также в обработке ключевых событий, чтобы сделать окно работоспособным). Я чувствую, что в какой-то момент для этого появится протокол - не хватает одного на тонну протоколов расширения и проверки запаха кода для каждого из них. Тем не менее, я надеюсь, что в настоящее время не предпринимается никаких действий, потому что фаза предложения по новому протоколу отрывочна по своей природе. Очень сложно изменить протокол после того, как он был выпущен как стабильный, поэтому, вероятно, потребуется время, чтобы увидеть его даже в нестабильном состоянии.

Я рекомендую продолжать оказывать поддержку такого рода изменениям, но проявите терпение и не думайте, что это произойдет в ближайшее время (у нас даже нет нестабильного состояния протокола). В то же время, если вы действительно хотите выполнить работу, проверьте расширение протокола серверных украшений KDE и используйте его, если оно доступно. И не думайте, что это будет доступно.

Другие вопросы по тегам