创建一个类型为 _NET_WM_WINDOW_TYPE_DESKTOP 的窗口。
怎么样?好吧,它需要一些编码,但以下方法在我的系统上起到了作用:
#include <X11/StringDefs.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
int main(int argc, char *argv[])
{
Display *display = XOpenDisplay("");
Window win = XCreateSimpleWindow(display, XDefaultRootWindow(display), 0, 0, 1920, 1080, 0, 0, WhitePixel(display, DefaultScreen(display)));
Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
Atom desktop = XInternAtom(display, "_NET_WM_WINDOW_TYPE_DESKTOP", False);
XChangeProperty (display, win, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &desktop, 1);
XClearWindow(display, win);
XMapWindow(display, win);
while (1)
{
XEvent event;
XNextEvent(display, &event);
}
XUnmapWindow(display, win);
XCloseDisplay(display);
}
这显示了一个与我现有桌面重叠但位于程序窗口下方的白色窗口;我的 KDE 任务栏仍然可见。
几点说明:
- 在做 XMapWindow 之前必须设置属性
- 窗口大小应与您的屏幕大小相匹配(我硬编码了我的值),否则您会收到 BadRequest 错误。
当我终止该程序时,我的旧桌面返回了,但这可能不适用于其他窗口管理器。试试看。