我的 X11 客户端/服务器设置为使用后备存储(backing_store = WhenMapped),当我的窗口部分被遮挡时它可以正常工作:删除遮挡窗口的内容,现在可见的部分从后备存储中刷新,无需我要重画...
...但是当窗口被取消映射然后再次映射时它不起作用:我得到 UnmapNotify 然后 MapNotify 事件,但我的窗口在映射时是空白的,我必须自己重新绘制整个东西。
所以我的问题是:如何让后备存储为 Unmap/Map 以及 Expose 工作?(backing_store = Always) 没有区别。
系统:Ubuntu 16.04,X.Org X Server 1.19.3
谢谢
小智 2
我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
Run Code Online (Sandbox Code Playgroud)
如果未启用,您可以尝试创建/etc/X11/xorg.conf.d/10-backing-store.conf(或将其添加到现有文件,如果您有一个包含Device部分的文件):
Section "Device"
Option "BackingStore" "on"
EndSection
Run Code Online (Sandbox Code Playgroud)
重新启动 X 并查看 Xorg.0.log 中是否启用了该选项。
还有+bsXorg 本身的选项(注意 +),我过去曾成功使用过该选项。
> Xorg --help
...
+bs enable any backing store support
Run Code Online (Sandbox Code Playgroud)