linux - x11 - 如何设置 _NET_WM_ALLOWED_ACTIONS

标签 linux x11 xlib

我使用 XCreateSimpleWindow 创建 x11 窗口。 xprop 显示了我的窗口允许的以下操作:

_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_STICK, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW

如果我没有明确设置它们(如上所述)会发生什么?一个窗口有一个默认列表,其中包含所有这些?如何明确地设置它们?

编辑1 以下是仅设置一个允许的操作的示例代码:

Atom aa = XInternAtom(d, "_NET_WM_ALLOWED_ACTIONS", False);
Atom close = XInternAtom(d, " _NET_WM_ACTION_CLOSE", False);
XChangeProperty(d, w, aa, XA_ATOM, 32, PropertyNewValue, (unsigned char*)&close,  1);

窗口管理器仍然允许我移动或调整窗口大小,所以也许我应该发送一些客户端消息?我想要一个只允许关闭操作的窗口。

最佳答案

1) 不,默认情况下窗口没有属性,但窗口管理器经常设置一些默认值。尝试在没有 WM 的情况下运行您的程序以查看差异

2) 使用“ChangeProperty”请求。窗口属性是与窗口相关的一些数据+一点元数据:名称(atom)和类型(atom)。如果数据大小超过单一类型,则假设您有这些数据的数组。例如,atom 只是 32 位 unsigned int。如果您看到原子类型的 8 字节属性,则您会将内容解释为两个原子。请参阅XChangeProperty文档(如果您使用的是 xlib)

关于linux - x11 - 如何设置 _NET_WM_ALLOWED_ACTIONS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28495586/

相关文章:

c++ - X Window 系统上的顶级窗口

c - 为什么 gcc 提示已经存在的库找不到?

Linux Ubuntu 14.04 在 1 台机器 1 个 ip 上的 2 个不同的 Web 服务器上运行 2 个网站

c - 一些 Linux 内核 C 代码

linux - 如何枚举 X.org 中所有可用的键盘布局?

linux - 在 Linux 中确定和恢复窗口状态

调用 XClearArea 后无法修改 Xlib 中的 GC

c++ - undefined reference c++,异常情况

haskell - 获取 X11 Haskell 库中的事件窗口标题

c++ - 创建带有帧缓冲区的 xlib 窗口,我可以直接绘制并使用 XPutImage