我编写了一个简单的资源显示程序,它在一个非常小的窗口中显示一些统计信息,例如可用 RAM 量。我希望当我在它们之间切换时它在任何桌面上都可见,如何实现这一点?
更新:
感谢n.m.我走在正确的轨道上(希望如此),这是我到目前为止所得到的:
unsigned int ints[2];
ints[0] = 0xFFFFFFFF;
ints[1] = 2;
XChangeProperty(d, w, XInternAtom(d, "_NET_WM_DESKTOP", 1),
XA_ATOM,
32,
PropModeReplace,
(unsigned char*)ints,
2);
它可以编译,但不会执行任何操作,即窗口仍然只在最初启动的桌面上可见。我的代码有什么问题吗?
X11 或 Xlib 本身没有桌面或桌面之间切换的概念。这一切都在您的窗口管理器中。通常窗口通过窗口属性来通知WM它的需求。
现代 Freedesktop 兼容的窗口管理器使用 _NET_WM_DESKTOP 属性。在映射窗口之前将其设置为
0xFFFFFFFF
。
客户端可以选择不设置此属性,在这种情况下,窗口管理器应该按照自己的意愿放置它。
表示该窗口应该出现在所有桌面上。0xFFFFFFFF
编辑正确的咒语是
unsigned long prop = 0xFFFFFFFF; // note long! even if long is 64 bit
XChangeProperty(d, w, XInternAtom(d, "_NET_WM_DESKTOP", 1),
XA_CARDINAL, // note CARDINAL not ATOM
32,
PropModeReplace,
(unsigned char*)&prop,
1); // note 1
XMapWindow(d, w); // map after changing the property
您可以使用
xprop
命令行实用程序来验证属性设置是否正确。