XLIB如何使窗口全屏显示?

问题描述 投票:1回答:1

我正在使用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中设置什么值?

c linux game-engine xlib game-development
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.