繁体   English   中英

韦兰窗饰

[英]Wayland window decorations

我正在编写一个 Wayland 客户端,仅使用 Wayland C 库( wayland-client.h )。 我想花费尽可能少的精力来添加用于移动、调整大小、最小化和关闭窗口的窗口装饰。

我看到的选项是:a)请求合成器在我的 Wayland 表面周围绘制窗口装饰(服务器端装饰),或 b)使用一个小型库或代码在客户端自己绘制装饰(客户端装饰)。

有哪些方法可以实现这两种选择? 例如,对于简单的hello_wayland示例,我如何请求服务器端装饰 (a) 或如何在客户端 (b) 中绘制窗口装饰? 对于后一个选项,我正在寻找类似于 Rust 库https://github.com/Smithay/wayland-window 的东西,但适用于 C/C++。

编辑:对于客户端装饰选项 (b),我找到了专用的装饰库libdecoration

更新:如果您不阅读评论,只想强调最初提出的答案中概述的协议已被接受为不稳定。 https://github.com/wayland-project/wayland-protocols/commit/76d1ae8c65739eff3434ef219c58a913ad34e988

原文:目前,在 Wayland 上没有标准/稳定的方法来进行服务器端装饰。 协议本身并没有禁止服务器端装饰,但它似乎没有优先考虑它。 (不过,抱怨没有意义,因为无论如何,shell 协议都在 xdg-namespaced 协议下为桌面重新定义。)

KDE 显然受到了这种影响,特别是因为 Plasma Shell 使用了服务器端装饰来保持一致的主题。 KDE 人员为他们的实现提供了一个协议扩展,简称为“服务器装饰” KWayland 服务器装饰 您可以测试此接口,并在它存在时使用它。

更长期的解决方案还没有落地。 这是从事 Wayland 协议(可能是 XDG 协议)的团队必须同意的事情。 有人试图将其纳入 xdg-namespaced Wayland 协议中,名称为xdg-toplevel-decoration 该补丁最终被标记为已被取代。 修补此协议的最新尝试仍处于提案状态 - xdg-decoration

如果没有服务器端装饰,您将不得不绘制自己的装饰(以及处理关键事件以使窗口起作用)。 我觉得 a 协议会在某个时候出现 - 缺少一个请求大量扩展协议和代码异味检查的每个扩展协议。 尽管如此,我希望目前缺乏行动是因为新协议的提案阶段本质上是挑剔的。 协议在稳定发布后很难更改,因此即使进入不稳定状态也可能需要时间。

我的建议是继续支持这种改变,但要有耐心,不要假设它会很快到来(我们甚至没有协议的不稳定状态)。 同时,如果您真的想完成工作,请检查 KDE 的服务器装饰协议扩展,并在可用时使用它。 并且不要假设它将可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM