XLIB如何使窗口全屏显示?

时间:2019-03-11 21:55:16

标签: c linux game-engine xlib game-development

我正在使用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 UbuntuFullscreen window without Gnome Panel)。

为了执行任何一项操作,我必须使用XGetWMSizeHints,但是功能失败。我是否需要先为窗口创建属性,然后使用此功能?我应该在XSizeHints中设置什么值?

1 个答案:

答案 0 :(得分:1)

我已经在我的环境中尝试过您的解决方案,并且它可行。

尽管如此,我注意到XGetWMSizehints的返回值在失败时为0,在成功时为非零,这意味着您的示例错误地打印了“失败”。