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

时间:2018-04-05 05:12:50

标签: 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 ...

1 个答案:

答案 0 :(得分:7)

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

理论上,您可以在原始Xlib中执行您想要的操作。但是细节非常复杂,你真的应该使用一些工具包,比如QtGTK(生命很短),或者libSDLSFML。另请参阅this列表。

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

因此,在原始X11级别进行编码就像在汇编程序中编码一样。没有人为今天的真实节目做到这一点,并且由于类似的原因(abstraction的水平太低;关注的细节太多......)。

请注意,目前的趋势是用Wayland替换X.你可能需要几年时间才能在X11中从零开始开发你的东西,当你成功时,X就会变得过时。 BTW最新版本的Qt& GTK了解Wayland(因此相同的代码可以在X11和Wayland上运行)。

所以使用一些GUI toolkit 。它们是数百万行的怪物软件,并且存在这种复杂性的原因(同样,graphics cards今天非常复杂的硬件;另见this& {{3 }})。它们使您能够禁用关闭窗口(因为他们知道所有ICCCM和EWMH详细信息)。

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

顺便说一下,你不清楚的问题看起来很奇怪(缺乏动力和背景)。您似乎错误地认为您的应用程序是屏幕上唯一的应用程序,这违背了每个documentation of Qt的哲学(这是多任务和多窗口,因此多应用程序,本质上) 。您应该将您的应用程序视为使用其他的应用程序(例如,对于windowing system,如果不考虑几个应用程序和几个,这是没有意义的>涉及的窗户)。高级用户可以始终"终止"您的申请(例如copy & pastekill(1))。您可能希望通知窗口关闭(例如,当发生这种情况时显示一些对话框)。您甚至不应该设计一个不可关闭的应用程序(这违反了所有编码和接口指南)。