Xlib + Unity仅关闭允许的操作

时间:2016-10-28 14:04:40

标签: c xlib

我只想在唯一可能的操作结束时制作示例应用。 这可能与Unity(Ubuntu)有关吗? 我犯了错误吗?

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
static void only_close(Display *display, Window window)
{

    int retval;
    Atom aa = XInternAtom(display, "_NET_WM_ALLOWED_ACTIONS", False);
    Atom close = XInternAtom(display, " _NET_WM_ACTION_CLOSE", False);

    retval = XChangeProperty(display, window, aa, XA_ATOM, 32, PropModeReplace, (unsigned char*)close,  1);

    printf("###### XChangeProperty() reted %d\n", retval);
}

int main()
{

    Display *dis;
    Window win;

    dis = XOpenDisplay(NULL);
    win = XCreateSimpleWindow(dis, RootWindow(dis, 0), 1, 1, 500, 500, \
                              0, BlackPixel (dis, 0), BlackPixel(dis, 0));
    XMapWindow(dis, win);
    printf("window %i\n", (int)win);
    only_close(dis, win);
    XFlush(dis);
    sleep(10);
    return(0);
}

1 个答案:

答案 0 :(得分:0)

首先,您需要(unsigned char*)&close(数据地址)

其次,在WM有机会管理窗口之前,您过早地设置了属性。 WM 必须在首次管理窗口时丢弃此属性的旧值。在第一次暴露事件之后尝试,或者在延迟1秒后尝试。

第三,它不能保证有效。在我的机器(不是Unity)上,任务栏中的窗口操作确实被禁用,但窗口框架仍然有它们WM仍然允许它们。我不知道这是不是我的WM中的错误。