我正在使用Xlib编写我自己的平台库(我知道是天才,但我无法全屏运行在基于GNOME的DE上。它适用于I3和Xfce,但不适用于GNOME或Unity。这是我到目前为止的内容。
XSizeHints* size_hints;
long hints = 0;
size_hints = XAllocSizeHints();
if (XGetWMSizeHints(_platform.display, _window.window, size_hints, &hints,
XInternAtom(_platform.display, "WM_SIZE_HINTS", False)) == 0) {
puts("Failed.");
}
XLowerWindow(_platform.display, _window.window);
XUnmapWindow(_platform.display, _window.window);
XSync(_platform.display, False);
printf("%ld\n", hints);
XFree(size_hints);
Atom atoms[2] = { XInternAtom(_platform.display, "_NET_WM_STATE_FULLSCREEN", False), None };
XChangeProperty(
_platform.display,
_window.window,
XInternAtom(_platform.display, "_NET_WM_STATE", False),
XA_ATOM, 32, PropModeReplace, (unsigned char*)atoms, 1);
XMapWindow(_platform.display, _window.window);
XRaiseWindow(_platform.display, _window.window);
减去所有XGetWMSizeHints
代码,此代码可在其他WM和DE上正常工作。根据其他Stack Overflow问题,在GNOME上全屏工作的方法是更改某些WM-NORMAL_HINT
值或将其全部删除(How to open a non-decorated fullscreen window on Ubuntu和Fullscreen window without Gnome Panel)。
为了执行任一操作,我必须使用XGetWMSizeHints
,但是功能失败。我是否需要先为窗口创建属性,然后使用此功能?我应该在XSizeHints
中设置什么值?
我已经在我的环境中尝试过您的解决方案,并且可行。
尽管我注意到,XGetWMSizehints的返回值在失败时为0,在成功时为非零,这意味着您的示例错误地打印了“失败”。