韦兰 window 装饰品

Wayland window decorations

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

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

有哪些方法可以实现这两个选项?例如。对于简单的 hello_wayland example, how do I request server side decorations (a) or how can I draw window decorations in the client (b)? For the latter option, I am looking for something like the Rust library https://github.com/Smithay/wayland-window,但对于 C/C++.

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

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

原文: 目前,没有 standard/stable 方法可以在 Wayland 上进行服务器端装饰。该协议本身并没有禁止服务器端装饰,但它似乎确实没有优先考虑它。 (尽管如此,由于 shell 协议正在 xdg-namespaced 协议下为桌面重新定义,因此投诉没有实际意义。)

KDE 显然受此影响,特别是因为服务器端装饰用于 Plasma Shell 以保持一致的主题。 KDE 人员对其实现有一个协议扩展,简称为 "server-decorations" KWayland server-decorations。您可以测试此接口,如果存在则使用它。

更长远的解决方案还没有落地。这是从事 Wayland 协议(可能是 XDG 协议)的一群人必须达成一致的事情。曾试图将其纳入名为 xdg-toplevel-decoration. The patch eventually being marked superseded. The latest attempt to patch this protocol in is still in the proposal state - xdg-decoration.

的 xdg 命名空间 Wayland 协议中

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

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