xlib push window 到另一个windows 的后面
xlib push window to the back of the other windows
我正在使用 c 和 xlib 制作第一个应用程序,到目前为止它进展顺利并且正在做我想做的事!它是无边框的 window,当应用程序启动时会自动全屏显示。
我的应用程序将有一些实用程序,例如桌面上的时钟和当前天气。
所以要做到这一点,我需要能够将我的 window 推到所有其他 windows 的后面,并保持在那里。
我的问题是,如何将 window 推到所有其他打开的 windows 后面(理想情况下是在 cairo-dock 后面,但不是必需的),并保持在那里?
创建类型 _NET_WM_WINDOW_TYPE_DESKTOP 的 window。
怎么样?好吧,它需要一些编码,但以下对我的系统起到了作用:
#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);
}
这显示了一个白色 window 与我现有的桌面重叠,但位于程序 windows 下方;我的 KDE 任务栏也仍然可见。
一些注意事项:
- 您必须在执行 XMapWindow
之前设置 属性
- window 的大小应与您的屏幕大小相匹配(我硬编码了我的值),否则您会收到 BadRequest 错误。
当我终止程序时,我的旧桌面返回,但这可能不适用于其他 window 管理器。试试吧。
我正在使用 c 和 xlib 制作第一个应用程序,到目前为止它进展顺利并且正在做我想做的事!它是无边框的 window,当应用程序启动时会自动全屏显示。
我的应用程序将有一些实用程序,例如桌面上的时钟和当前天气。
所以要做到这一点,我需要能够将我的 window 推到所有其他 windows 的后面,并保持在那里。
我的问题是,如何将 window 推到所有其他打开的 windows 后面(理想情况下是在 cairo-dock 后面,但不是必需的),并保持在那里?
创建类型 _NET_WM_WINDOW_TYPE_DESKTOP 的 window。
怎么样?好吧,它需要一些编码,但以下对我的系统起到了作用:
#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);
}
这显示了一个白色 window 与我现有的桌面重叠,但位于程序 windows 下方;我的 KDE 任务栏也仍然可见。
一些注意事项:
- 您必须在执行 XMapWindow 之前设置 属性
- window 的大小应与您的屏幕大小相匹配(我硬编码了我的值),否则您会收到 BadRequest 错误。
当我终止程序时,我的旧桌面返回,但这可能不适用于其他 window 管理器。试试吧。