我正在使用 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,在成功时为非零,这意味着您的示例错误地打印了“失败”。
关于c - XLIB 如何使窗口全屏显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55111001/