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

问题描述 投票:0回答:1

我编写了一个简单的资源显示程序,它在一个非常小的窗口中显示一些统计信息,例如可用 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
1个回答
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
命令行实用程序来验证属性设置是否正确。

© www.soinside.com 2019 - 2024. All rights reserved.