在嵌入式 Linux 系统中,我试图显示一个关闭通知,该通知在关闭时应覆盖任何其他窗口。现在创建窗口不是问题,但可靠地显示窗 Eloquent 是问题。 X 服务器或 WM 不知何故太忙而无法每次都绘制通知。考虑到我们有限的 CPU 能力,这并不奇怪。
所以,我想通过使用 gdk_x11_grab_server() (在默认显示上调用 XGrabServer)抓取 X 服务器,可以让 WM/X 变得容易。但是我什么时候应该调用grab函数呢?如果我在构建窗口之前调用它,在窗口的暴露事件中显示窗口或事件之前,则不会在屏幕上绘制任何内容(即使在空载测试中)!
The XGrabServer function disables processing of requests and close downs on all other connections than the one this request arrived on.
我认为这意味着只应处理来 self 的应用程序的请求,但情况似乎并非如此,因为如果 X 被我的应用程序抓取,则不会绘制任何内容。
那么,应该如何以及何时使用 X 服务器来实现想要的结果,还是它完全是一个错误的工具,我误解了它的用途(或者试图使用它太高级了)让它真正发挥作用)。
最佳答案
我猜测没有绘制任何内容,因为您正在打开一个普通的顶级窗口,在这种情况下,窗口管理器需要对其进行操作才能使其可见;但是您已经通过调用 XGrabServer() 锁定了窗口管理器。
您可以尝试在窗口上设置 OverrideRedirect,它告诉 X 服务器窗口管理器根本不应该参与该窗口。这还具有从窗口中删除任何装饰(标题栏、关闭按钮等)的效果,这很可能是您想要的关闭通知。
关于linux - 使用 XGrabServer 抓取 X 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107989/