xlib - xinit 窗口始终位于顶部 _NET_WM_STATE _NET_WM_STATE_ABOVE

标签 xlib

我使用fedora 14系统。
我在使用starx启动桌面系统时,创建了一个Xlib程序,代码如下:

    Atom wmStateAbove = XInternAtom(display, "_NET_WM_STATE_ABOVE",1);
    if(wmStateAbove != None)
            printf("_NET_WM_STATE_ABOVE has atom of %ld \n", (long)wmStateAbove);
    else
            printf("ERROR: can't find atom for _NET_WM_STATE_Above! \n");

    Atom wmNetWmState = XInternAtom(display, "_NET_WM_STATE", 1);
    if(wmNetWmState != None)
            printf("_NET_WM_STATE has atom of %ld \n", (long)wmNetWmState);
    else
            printf("ERROR: can't find atom for _NET_WM_STATE! \n");



    if(wmStateAbove != None)
    {
            printf("======\n");
            XClientMessageEvent xclient;
            memset(&xclient, 0, sizeof(xclient));

            xclient.type = ClientMessage;
            xclient.window = win;
            xclient.message_type = wmNetWmState;
            xclient.format = 32;
            xclient.data.l[0] = 1;
            xclient.data.l[1] = wmStateAbove;
            xclient.data.l[2] = 1;
            xclient.data.l[3] = 1;
            xclient.data.l[4] = 0;

            printf(" default Window %d \n", DefaultRootWindow(display));
            XSendEvent(display,
            DefaultRootWindow(display), False,
            SubstructureRedirectMask | SubstructureNotifyMask,
            (XEvent*)&xclient);

可以创建放置在顶部的窗口
但是如果我使用xinit启动桌面系统,xinitrc脚本如下:

enter image description here

程序无法正常运行,提示_NET_WM_STATE 和_NET_WM_STATE_ABOVE 找不到,窗口不能放在最上面,是什么原因?

最佳答案

如果此代码在窗口管理器启动并准备好对消息作出 react 之前执行,则在启动时执行此操作可能会很棘手。
事件中也有错误; xclient.data.l[2] 应该是 0,而不是 1。https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html#idm46035372536800

关于xlib - xinit 窗口始终位于顶部 _NET_WM_STATE _NET_WM_STATE_ABOVE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070984/

相关文章:

c - x11 中指向子窗口的指针

c++ - X11/Xlib : Create "GlassPane"-Window

X11:XGrabPointer会阻止其他应用程序发生任何鼠标事件吗?

c - XLib:全屏后如何返回窗口模式?

linux - Linux 上的无边框窗口

c - X 工具包 : heap is growing when recreating widgets

c - X11 标准文件选择器对话框

c - 如何组织一个需要创建Window并退出的C程序?

XLIB 装修问题

python - 禁用键盘但继续获取事件