我只想在唯一可能的操作结束时制作示例应用。 这可能与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);
}
答案 0 :(得分:0)
首先,您需要(unsigned char*)&close
(数据地址)
其次,在WM有机会管理窗口之前,您过早地设置了属性。 WM 必须在首次管理窗口时丢弃此属性的旧值。在第一次暴露事件之后尝试,或者在延迟1秒后尝试。
第三,它不能保证有效。在我的机器(不是Unity)上,任务栏中的窗口操作确实被禁用,但窗口框架仍然有它们WM仍然允许它们。我不知道这是不是我的WM中的错误。