我很困惑的部分来自Volume One: Xlib Programming Manual。
键盘和指针事件在最小的窗口中生成封闭指针(或抓住指针,如第8.3.2.2节“键盘和指针的抓取”)。然后是这些类型之一(仅)通过窗口向上传播直到事件类型在
event_mask
或窗口的do_not_propagate_mask
属性。如果找到事件首先在event_mask
中(或在同一窗口中)就像在该窗口中发生一样发送,并且在do_not_propagate_mask
首先,然后再也不会发送。的ID最终接收到事件的窗口(如果有)被放置在窗口中事件结构的成员。
作者关于键盘和指针事件的“生成”是什么意思?
[所有事件都序列化为32字节的数据,在您的上下文中“生成”是“用所有必需的信息填充32字节的数据(某些事件在诸如目标窗口ID,事件服务器时间之类的事件中通用,某些事件特定于事件类型例如指针位置的x,y或按下的键的键代码)“ +将其发送到与连接关联的套接字
https://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html
事件长度为32个字节。事件中未使用的字节不是保证为零。每个事件都包含一个8位类型代码。的如果生成了事件,则此代码中的最高有效位将被设置来自SendEvent请求。事件代码64至127保留用于扩展,尽管核心协议未定义用于选择对此类事件的兴趣。每个核心事件((KeymapNotify的例外)也包含最低有效16位客户端发出的最后一个请求的序列号已(或当前正在)由服务器处理。