linux - 使用 XGrabServer 抓取 X 服务器

标签 linux embedded

在嵌入式 Linux 系统中,我试图显示一个关闭通知,该通知在关闭时应覆盖任何其他窗口。现在创建窗口不是问题,但可靠地显示窗 Eloquent 是问题。 X 服务器或 WM 不知何故太忙而无法每次都绘制通知。考虑到我们有限的 CPU 能力,这并不奇怪。

所以,我想通过使用 gdk_x11_grab_server() (在默认显示上调用 XGrabServer)抓取 X 服务器,可以让 WM/X 变得容易。但是我什么时候应该调用grab函数呢?如果我在构建窗口之前调用它,在窗口的暴露事件中显示窗口或事件之前,则不会在屏幕上绘制任何内容(即使在空载测试中)!

documentation说:

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/

相关文章:

embedded - Poulsbo 系统 Controller 集线器 (US15W) 中 LPC 总线的配置寄存器

在linux C上复制文件

c++ - gcc stdio.h 错误

linux - 如何测试namenode内存使用情况?

c - 在 C 中解析大文件

c - 处理多个嵌入式平台的代码库中的 FAR 指针

rust - 当值将在启动时写入一次然后仅读取时,嵌入式 Rust 中的 Mutex 是否有轻量级替代方案?

c - C语言中全局变量和局部变量都存储在内存中

c - 如何将音频事件前后 50 毫秒存储在循环缓冲区中?

linux - 查找 [主机] : no such host error in Go