我写了一个简单的资源显示程序,它在一个非常小的窗口中显示一些统计数据,比如可用内存量。当我在它们之间切换时,我想让它在任何桌面上都可见,如何实现呢?
更新
感谢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);
它编译,但它没有做任何事情,即窗口仍然只在它最初启动的桌面上可见。我的代码出了什么问题?
答案 0 :(得分:2)
X11或Xlib本身没有台式机的概念或桌面之间的切换。这一切都在您的窗口管理器中。通常,窗口会通过window properties向WM通知其需要。
符合Freedesktop标准的现代窗口管理器使用_NET_WM_DESKTOP属性。在映射窗口之前将其设置为0xFFFFFFFD。
修改正确的咒语
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
命令行实用程序来验证属性是否设置正确。