关闭与X的连接¶
在连接关闭时,客户端所做的所有事件选择将被丢弃。
如果客户端主动抓取了鼠标指针,则需要执行UngrabPointer操作。
如果客户端主动抓取了键盘,则需要执行UngrabKeyboard操作。
所有被动抓取的客户端被释放。
如果客户端抓取了服务器,则执行UngrabServer操作。
客户端拥有的所有选择(参见SetSelectionOwner请求)都被拒绝。
如果关闭模式(参见SetCloseDownMode请求)是RetainPermanent或RetainTemporary,那么客户端分配的所有资源(包括颜色映射项)分别被标记为永久或临时(但这并不阻止其他客户端显式地销毁它们)。如果模式为Destroy,则销毁客户端的所有资源。
当客户端的资源被销毁时,对于客户端的保存集中的每个窗口,如果该窗口是由客户端创建的窗口的下级窗口,则保存集窗口将被重化为最近的祖先,这样保存集窗口就不是由客户端创建的窗口的下级窗口。
如果保存集窗口未被映射,则对其执行MapWindow请求(即使它不是客户端创建的窗口的下级窗口)。重定位使保存集窗口左上角的绝对坐标(相对于根窗口)保持不变。在保存集处理之后,客户端创建的所有窗口都将被销毁。对于客户端创建的每个非窗口资源,将执行适当的Free请求。客户端分配的所有颜色和色图项都被释放。
服务器经历一个没有连接和有一些连接的循环。每次由于使用Destroy关闭模式关闭连接而过渡到没有连接的状态时,服务器都会重置其状态,就好像它刚刚启动一样。首先,销毁在RetainPermanent或RetainTemporary模式下终止的客户端的所有遗留资源。它还包括删除除预定义的原子标识符之外的所有标识符、删除所有根窗口上的所有属性、重置所有设备映射和属性(键点击、铃声音量、加速)、重置访问控制列表、恢复标准根块和光标、恢复默认字体路径以及将输入焦点恢复到状态PointerRoot。
请注意,使用RetainPermanent或RetainTemporary关闭模式关闭连接不会导致服务器重置。