i3 窗口管理器¶
运行X不一定需要窗口管理器,但它通常与X结合使用,以便于执行某些操作。窗口管理器的工作是负责窗口的放置,为用户提供一些机制来更改窗口的位置/大小,并在一定程度上与客户端通信(例如,处理MPlayer等客户端的全屏请求)。
X11客户端在不同的上下文中运行,所以窗口管理器只是另一个客户端,就像所有其他X11应用程序一样。但是,它处理一些普通客户端通常不处理的事件。
在i3的情况下,任务(及其顺序)如下:
grab 按键绑定(按键按下/释放时候发送指定信号)
遍历所有现有窗口并管理它们(如果窗口管理器不是作为X的第一个客户端启动时候)
创建并管理新窗口
处理客户端的
_WM_STATE属性,i3 仅处理_WM_STATE_STATE_FULLSCREEN和_NET_WM_STATE_MANDS_ATTETION处理客户端的
WM_NAME属性处理客户端的大小提示,以按此比例显示
处理客户端的紧急提示
处理输入通知(焦点跟随鼠标)
处理按钮(比如鼠标按钮)按下后获得焦点或显示窗口事件
处理 expose 事件,以便重新绘制自己的窗口(比如装饰)
响应用户的命令:更改焦点、移动窗口、切换工作区、更改容器的布局模式(默认/堆叠/选项卡)、启动新应用程序、重新启动窗口管理器
main 函数¶
建立 xcb 连接
加载 i3 配置
检查 XKB 扩展,加载 Xcursor
设置 EWMH 信息
获取按键绑定
检查 XRandr 屏幕
管理所有现有窗口
执行配置的启动进程
启动 i3 bar
进入事件循环
i3配置解析¶
解析每行中带有
set字样的配置项,获取到set配置项中的key和value,并把所有配置项中涉及set配置的key替换为value