c - _NET_ACTIVE_WINDOW 和 XGetInputFocus 之间的 Xlib 区别

标签 c linux x11 xlib xorg

_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/

相关文章:

C 参数数组声明符

c - 在 C 中使用 wchar

c - 我必须包含哪个头文件才能在内核源文件中获取 printk()?

Linux 上的 Java : maximize a non-Java GUI application

php - 在 lampp 服务器中从 php 运行 ffmpeg 时找不到 GLIBCXX_3.4.9

c - 在 C 中用 int 初始化一个 char

linux - 在 Bash 中将一个程序的输出转换为另一个程序的输入

Linux shell 脚本赋值

c++ - 使用 "X11/Xutil.h"库读取像素时发生内存泄漏(使用 valgrind 输出)

c - 在linux中显示来自C的gif gif87a图像的最佳方法