c++ - xlib 防止关闭按钮退出应用程序

标签 c++ c xlib

有没有办法通过单击关闭按钮来防止应用程序退出?以下代码仅隐藏最小化和最大化按钮,但不隐藏关闭按钮...

Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
long value = XInternAtom(display, "_NET_WM_WINDOW_TYPE_TOOLBAR", False);
XChangeProperty(display, window, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value,1 );

我试图通过谷歌搜索有关覆盖 _NET_CLOSE_WINDOW 的内容,但找不到真正的...或从 xprop 中删除 _NET_WM_ACTION_CLOSE 的方法...

最佳答案

阅读ICCCM & EWMH .您可能需要数月(或数年)才能了解所有细节(以及与 X11X protocols and architectures 的关系)。

理论上,您可以在原始 Xlib 中做您想做的事。但细节是如此复杂,你真的应该使用一些工具包,比如 QtGTK (生命是短暂的),或者也许libSDLSFML .另见 this列表。

在协议(protocol)和 Xlib 级别掌握 X11 需要花费大量时间(相关文档有数千页)。你确定愿意花那个钱吗?

所以在原始 X11 级别编码就像在汇编程序中编码。今天没有人为真正的程序这样做,并且出于类似的原因(abstraction 的级别太低;需要关心的细节太多......)。

请注意,当前趋势是用 Wayland 替换 X .在 X11 中,您可能需要数年时间从头开始开发您的东西,到您成功时,X 就会过时了。顺便说一句,Qt 和 GTK 的最新版本了解 Wayland(因此相同的代码可以在 X11 和 Wayland 上运行)。

所以使用一些GUI toolkit 。它们是数百万行的怪物软件,并且有其复杂性的原因(另外,graphics cards 今天是非常复杂的硬件;另请参见 thisthis )。它们使您能够禁用关闭窗口(因为它们知道所有 ICCCM 和 EWMH 详细信息)。

由于您使用 C++ 标记了您的问题,我强烈建议您使用 Qt(或者可能是 SFML)。 documentation of Qt非常好。

顺便说一句,您不清楚的问题看起来很奇怪(并且缺乏动机和背景)。看来您错误地假设您的应用程序是屏幕上唯一的应用程序,这与每个 windowing system 的理念背道而驰。 (本质上是多任务和多窗口,因此是多应用程序)。您应该将您的应用程序视为与其他 应用程序一起工作(例如 copy & paste ,如果不考虑多个 应用程序和多个 窗口,这是没有意义的涉及)。高级用户可以总是“终止”您的应用程序(例如使用 kill(1)xkill )。您可能希望在窗口关闭时收到通知(例如,在发生这种情况时显示一些对话框)。您甚至不应该设计不可关闭的应用程序(这违反了所有编码和界面指南)。

关于c++ - xlib 防止关闭按钮退出应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664567/

相关文章:

c++ - CCfits 库演示代码不起作用

c++ - 在 Qt 中的两个类之间发出信号

c++ - 二维最大和窗口上的高效 C/C++ 算法

c++ - 在结构中,使用一个数组字段访问另一个数组字段是否合法?

c++ - 如何在 JNI C++ 中将 char * 转换为 uchar16

c - 这些函数和参数注释是什么?

c - 我应该相信调用库初始化函数有利于性能吗?

python - 为什么 XGrabKey 会生成额外的聚焦和聚焦事件?

linux - 如何使用 XLib 创建映射但不可见的窗口?

c - 如何使用 Xlib 作为 xeyes 通过透明窗口发送点击信号?