我的 X11 客户端/服务器设置为使用后备存储 (backing_store = WhenMapped),当我的窗口部分被遮挡时,它可以正常工作:删除遮挡窗口的内容,现在可见的部分将从后备存储中刷新,无需我要重新画...
...但是当窗口取消映射然后再次映射时它不起作用:我收到 UnmapNotify 然后 MapNotify 事件,但我的窗口在映射时是空白的,我必须自己重新绘制整个窗口。
所以我的问题是:如何让后备存储适用于 Unmap/Map 以及 Expose? (backing_store = 始终) 没有区别。
系统:Ubuntu 16.04,X.Org X Server 1.19.3
谢谢
答案1
我backing_store = always
想你是指客户端代码中的窗口属性?但是您确定BackingStore
您的 X 服务器已启用该选项吗?假设使用 Xorg,您应该找到您的日志(/var/log/Xorg.0.log
或最近的日志~/.local/share/xorg/Xorg.0.log
)并 grep 查找Backing store
:
> grep 'Backing store' ~/.local/share/xorg/Xorg.0.log
[ 67.851] (==) intel(0): Backing store enabled
如果未启用,您可以尝试创建/etc/X11/xorg.conf.d/10-backing-store.conf
(或将其添加到现有文件,如果您有一个包含部分的文件Device
):
Section "Device"
Option "BackingStore" "on"
EndSection
重新启动 X 并查看 Xorg.0.log 中是否启用了该选项。
还有+bs
Xorg 本身的选项(注意 +),我过去曾成功使用过该选项。
> Xorg --help
...
+bs enable any backing store support