根窗口
在X窗口系统中,每一个視窗都包含在另一个窗口中,这个视窗对它来说称之为父窗口。这使视窗间形成了一个等级制度。根窗口在这个等级制度中的最顶级,它与屏幕一样大,其他所有窗口都是它的后代。
由于每一个窗口都覆盖了父窗口的一部分,所以其他窗口均在根窗口之上显示。因此,根窗口只能在其他窗口之后显示一部分。换一种说法,根窗口构成了屏幕的背景,通过一些方法(比如xsetroot
或是X视频扩展程序)可以将一张图片设置作为電腦壁紙。
根窗口的直系后代被称为顶级窗口,这些窗口通常包含了装饰框架和一个标题栏(实际都是由窗口管理器添加)。顶级窗口一般是图形用户界面中的普通窗口,而非顶级窗口一般用于按钮、文本框等控件。
根窗口的属性有时会被作为客户端间通信的一种基本手段。举个例子,剪切缓冲区是根窗口用于复制一个窗口中选中的部分到另一个窗口的属性,DWM窗口管理器会将根窗口的名字显示在状态区,X资源也会在执行时存储到根窗口的一个属性。
虚拟根窗口
SWM窗口管理器引入了虚拟根窗口。从X协议角度看,这是一个普通的窗口。但是,X視窗管理器会将所有窗口的父级从真实根窗口替换为虚拟根窗口。虚拟根窗口主要供虚拟窗口管理器使用,用于提供如用户可切换的多个虚拟桌面。
其他客户端(与窗口管理器相比)有可能使用虚拟根窗口,此时可以在真实根窗口的直系子项中找到名为__SWM_VROOT
的窗口属性,其中有该窗口的标识符。在技术上,很多工程使用宏去查找作为包含vroot.h
的根窗口。
Freedesktop.org窗口管理器规范要求真实根窗口有一个名为_NET_VIRTUAL_ROOTS
的属性来包含一个作为虚拟根窗口的窗口列表;目前在_NET_CURRENT_DESKTOP
属性中能找到的活动虚拟根窗口。
虚拟根窗口常被SWM、TVTWM、AMIWM和Enlightenment窗口管理器使用。其他诸如KDE的系统使用一个虚拟背景窗口(比如包含各图标),但没有将其他窗口重分配给此窗口。X屏幕保护也使用虚拟根窗口:当屏幕保护被激活时,该程序创建一个虚拟根窗口,并放置在其他所有窗口上,以及调用其模块来找到该虚拟根窗口并在其中绘制。
使用根窗口的实用工具
参见
扩展链接
- Extended Window Manager Hints (页面存档备份,存于互联网档案馆),freedesktop.org提供
- toon_root.c,一个XPenguins的源文件,包含了各种有关窗口管理器的虚拟根/桌面窗口的信息