在不运行合成程序的情况下使用x11协议获取覆盖窗口需要做什么?

时间:2019-07-05 16:08:55

标签: c common-lisp overlay x11 composite

使用X11协议的Lisp实现,当没有运行合成器时,get-overlay-window会冻结。如果我取消了Lisp进程,则将xid打印出来。 这也冻结了我在另一个lisp线程中运行的lisp窗口管理器,尽管过程相同。基本上,X的行为就像被抢走一样,所以感谢上帝ctrl-alt-f1。

以前有关复合的一些问题表明,没有复合器运行时,其他问题也会遇到类似的问题。

我猜测服务器可能正在等待某种超出协议授权的权限?还是必须完成一些特定的事件顺序?

当另一个合成器处于活动状态时,可以访问覆盖窗口对编写合成器没有帮助!

1 个答案:

答案 0 :(得分:0)

显然我的阅读理解与协议描述不符,或者他们的写作不通。

自动请求复合窗口重定向以确保Windows内容被绘制。它不能确保它们被覆盖层吸引!叠加层也不是透明的。因此,即使将所有窗口都设置为自动更新,当调用调用覆盖窗口以获取其XID时,它也会阻止您看到屏幕上的任何其他更新并阻止所有输入。

在某种意义上进行覆盖不是很有用。或对重定向的窗口进行自动更新的请求没有用。无论哪种方式,似乎都必须绘制每个像素,即使是我们不感兴趣的窗口也是如此。

也许这只是司机的事?