_NET_ACTIVE_WINDOW 和 XGetInputFocus() 有什么区别?他们总是指向同一个窗口吗?什么时候用一个?
谢谢。
最佳答案
主要区别在于设置而不是获取。当设置焦点(激活窗口)时,你更喜欢原子而不是 xlib 函数,因为这样窗口管理器可能会以不同的方式处理你的请求——例如,如果你想激活一个当时有模式对话框的窗口,WM 可能聚焦该对话框而不是窗口本身,或者如果用户禁用了焦点窃取,WM 可能只是突出显示窗口而不是实际聚焦它。
get too 也有一些小差异,基于相同的想法,虽然我不确定所有差异到底是什么,但我认为它可能是特定于应用程序的。使用我编写的程序,获取属性和焦点返回相同的窗口。但是对于 Firefox,它会返回两个不同的窗口——事件窗口是我们期望的窗口,但焦点却在一个隐藏窗口上。我不知道为什么会这样,但确实如此。
_NET_ACTIVE_WINDOW 比 XGetInputFocus 更好地使您远离那些应用程序实现细节。窗口管理器或键盘抓取器之类的东西可能对特定细节感兴趣,但应用程序询问它自己是否处于事件状态(或请求变为事件状态)应该使用原子。
在这里也多读一点顺便说一句: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#idm140200472702304
关于c - _NET_ACTIVE_WINDOW 和 XGetInputFocus 之间的 Xlib 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31800880/