xlib阻止关闭按钮退出应用程序

lan*_*boy 0 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 );
Run Code Online (Sandbox Code Playgroud)

我试图通过谷歌搜索覆盖_NET_CLOSE_WINDOW,但无法真正找到一个......或者从xprop中删除_NET_WM_ACTION_CLOSE ...

Bas*_*tch 7

阅读ICCCMEWMH.您可能需要数月(或数年)来了解所有细节(以及与X11X协议和体系结构的关系).

理论上你可以在原始Xlib中做你想要的.但是细节太复杂了,你真的应该使用一些工具包,比如QtGTK(生命很短),或者libSDLSFML.又见这个列表.

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

因此,在原始X11级别进行编码就像在汇编程序中编码一样.今天没有人为真正的程序做到这一点,并且出于类似的原因(抽象层次太低;需要关注的细节太多......).

请注意,目前的趋势是,以取代X 韦兰.您可能需要几年时间才能在X11中从头开始开发您的东西,当您成功时,X将变得过时.BTW最新版本的Qt和GTK了解Wayland(因此相同的代码可以在X11和Wayland上运行).

所以使用一些GUI工具包.它们是数百万行的怪物软件,并且存在这种复杂性的原因(此外,图形卡是当今非常复杂的硬件;也参见).它们使您能够禁用关闭窗口(因为他们知道所有ICCCM和EWMH详细信息).

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

顺便说一句,你不明确的问题看起来很奇怪(缺乏动力和背景).您似乎错误地认为您的应用程序是屏幕上唯一的应用程序,这违背了每个窗口系统的理念(多任务和多窗口,因此多应用程序,本质上).您应该认为您的应用程序与其他应用程序一起工作(例如,复制和粘贴,没有任何意义,不考虑几个应用程序和涉及多个窗口).高级用户可以随时 "终止"您的应用程序(例如使用kill(1)xkill).您可能希望通知窗口关闭(例如,在发生这种情况时显示一些对话框).您甚至不应该设计一个不可关闭的应用程序(这违反了所有编码和接口指南).

  • 我花了很多个月,仍然没有理解ICCCM或EWMH.几个月也许是乐观的. (3认同)
  • 我强烈建议使用Qt(因为你用C++标记了你的问题) (2认同)