在应用程序窗口中,属性_NET_WM_WINDOW_TYPE的值标识出了该窗口的类型。我们可以用xprop –id wid _NET_WM_WINDOW_TYPE查看wid对应的窗口的类型。窗口管理器可以根据这个属性值(还有其它属性值)来决定是否要对窗口进行装饰,窗口的z-order和其它的窗口行为。
下面将详细介绍http://standards.freedesktop.org/wm-spec/1.4/index.html中定义的各种窗口类型。
_NET_WM_WINDOW_TYPE_DESKTOP:这种类型的窗口就是我们通常看到的桌面了。桌面窗口是由文件管理器(如nautilus ['nɔ:tiləs;'nɔ:tələs])创建的。
_NET_WM_WINDOW_TYPE_DOCK:这种类型的窗口就是我们通常看到的自动靠边窗口。它通常位于其它窗口的上面。
_NET_WM_WINDOW_TYPE_TOOLBAR 和 _NET_WM_WINDOW_TYPE_MENU:工具栏和菜单窗口。对于我们一般看到的菜单窗口(如右键菜单等),它们的类型都不是TYPE_MENU。在freedesktop.org的标准中,TYPE_MENU类型是用来标识pinnable menu窗口的。对于pinnable menu window我现在还找不到一个合适的翻译,但是“分离式菜单”(tear-off menu)的类型正是TYPE_MENU,所以,这里猜想pinnable menu应该有着tear-off menu类似的表现形式。何谓“分离式菜单”?具体描述起来是指这样一类菜单窗口:我们可以把这个菜单拉到主窗口外面,当焦点不在这个菜单窗口时,它也不会隐藏。可以看下面的截图,其中标题为“foo”的窗口就是tear-off menu,它的类型是TYPE_MENU
_NET_WM_WINDOW_TYPE_UTILITY:这里一种永久性的功能窗口,就像调色板或都工具窗口就是这种类型。但是它并不同于TOOLBAR类型窗口,因为它并不能多主窗口中分离。这种窗口也不同于DIALOG窗口,因为它不是瞬时窗口。在程序的运行过程中,用户通常是一直打开这种窗口的。
_NET_WM_WINDOW_TYPE_SPLASH:通常这种窗口出现在程序的启动画面。
_NET_WM_WINDOW_TYPE_DIALOG:对话框窗口。
_NET_WM_WINDOW_TYPE_DROPDOWN_MENU:下拉菜单窗口。
_NET_WM_WINDOW_TYPE_POPUP_MENU:弹出式菜单窗口。
_NET_WM_WINDOW_TYPE_TOOLTIP:工具提示窗口。例如,当我们的光标移动到某个菜单项时所出来的提示窗口就是这种类型。
_NET_WM_WINDOW_TYPE_NOTIFICATION:通知窗口。一个典型的例子就是当我们使用笔记本电话过程中可能会看到的“你的电池电量不足”的提示窗口。
_NET_WM_WINDOW_TYPE_COMBO:组合框窗口。如下图的下拉窗口。
_NET_WM_WINDOW_TYPE_DND:标识窗口正在被拖动。如下图:
_NET_WM_WINDOW_TYPE_NORMAL:这种窗口的定义规则如下:如果窗口是被管理的,而且没有_NET_WM_WINDOW_TYPE 和WM_TRANSIENT_FOR就会被设置成NORMAL;如果窗口是忽略重定向的(也就是不被窗口管理器所管理的),而且没有NET_WM_WINDOW_TYPE属性,就会被设置成NORMAL类型。