c - XLIB 如何使窗口全屏显示?

标签 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 中设置什么值?

最佳答案

我已在我的环境中尝试了您的解决方案,并且它有效。

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

关于c - XLIB 如何使窗口全屏显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55111001/

相关文章:

c - 多字符字符常量 [-Werror,-Wmultichar]

c - 组装:推 vs movl

linux - Antergos Linux 上的 "OPENSSL_1.0.0 not found"

javascript - 未生成用于角色扮演游戏 map 的 HTML5 Canvas 视口(viewport)

尝试在 OS X Mavericks 中绘制图形时 Java 崩溃

c++ - 堆通常是如何实现的?

c - 将 GPG 与 C 一起使用?

java - 如何在 package.json start 中的同一命令行中运行 Node 服务器和 java 服务器

正则表达式匹配引号之间的字符串

oop - 模块化游戏引擎的例子?