将C应用程序粘贴到所有桌面

时间:2017-04-12 18:25:54

标签: x11 xlib

我写了一个简单的资源显示程序,它在一个非常小的窗口中显示一些统计数据,比如可用内存量。当我在它们之间切换时,我想让它在任何桌面上都可见,如何实现呢?

更新

感谢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);

它编译,但它没有做任何事情,即窗口仍然只在它最初启动的桌面上可见。我的代码出了什么问题?

1 个答案:

答案 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命令行实用程序来验证属性是否设置正确。