我现在使用的是带有 GNOME 桌面环境的 ubuntu16.04。我可以metadata::nautilus-icon-position
用 c 或 python 更改桌面上文件的属性(例如),但桌面显示不会更新。然后我使用xdo_send_keysequence_window(x, CURRENTWINDOW, "F5", 0)
from模拟“F5”按下事件libxdo
,显示现在更新但闪烁(在我看来,桌面上的所有小部件都先被清除,然后重新绘制)。如果我不断更改文件属性并模拟“F5”按下,桌面将继续更新和闪烁。
我有两个问题:
- 桌面系统如何处理“F5”按下事件?(首先清除桌面上除背景之外的所有小部件,然后可能在下一个时间片中重新绘制所有小部件??)
- 有没有一种方法(api 接口或将事件发送到桌面)可以使桌面无效或重新绘制桌面而不闪烁,就像普通的 GUI 应用程序(widget.move() 或 container.invalidate())一样?
我搜索了很多,但找不到答案。非常感谢
答案1
就像F5
刷新函数,它就是这样处理的。这与在 Web 浏览器中点击刷新没什么不同F5
。页面被清除,并向服务器发出新的请求。对于 Nautilus 来说,这意味着视图被清除,目录被重新扫描。
您可以为 Nautilus 编写一个插件(扩展),它可以抓取背景的实际小部件,然后仅使部分矩形无效,但我不确定这是否能解决您的问题(您应该能够通过将窗口移动到相关区域然后再次将它们移开来进行测试)。
不过,这里最好的解决方案是针对 Nautilus 提交一个错误,并直接解决问题,这样当文件的此类属性被改变时,Nautilus 就会做正确的事情并改变图标位置等。