X Desktop Group(扩展窗口管理器提示)_xinerama-程序员宅基地

技术标签: linux  window  

        很久之前曾经翻译过窗口管理器的文件,现在和大家共享出来,方便大家阅读,对于一些部分是根据自己的理解结合原文进行的一个翻译,小白翻译可能有不足的地方,欢迎大家提出建议。

原文地址:

https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html

扩展窗口管理器提示

扩展窗口管理器提示

目录

介绍. 2

1.版本... 2

2.这是什么规格?... 2

3.本规范中使用的语言... 2

4.采用此规范的先决条件... 2

非 ICCM 功能. 2

1.Additional States. 3

2.最大化... 3

3.阴影... 3

4.模式... 3

5.大型桌面... 3

6.实施说明... 4

7.固定的窗口... 4

8.虚拟桌面... 4

9.实施说明... 4

10.分页器... 5

11.任务栏... 5

12.激活... 5

13.动画图标化... 5

14.窗口MDI中的窗口... 5

15.覆盖重定向窗口... 6

16.分层堆放顺序... 6

17.本规范范围... 6

根窗口属性(和相关消息). 7

1._NET_SUPPORTED. 7

2._NET_CLIENT_LIST. 7

3._NET_NUMBER_OF_DESKTOPS. 7

4._NET_DESKTOP_GEOMETRY. 8

5._NET_DESKTOP_VIEWPORT. 8

6._NET_CURRENT_DESKTOP. 9

7._NET_DESKTOP_NAMES. 9

8._NET_ACTIVE_WINDOW.. 10

9._NET_WORKAREA. 10

10._NET_SUPPORTING_WM_CHECK. 10

11._NET_VIRTUAL_ROOTS. 11

12._NET_DESKTOP_LAYOUT. 11

13._NET_SHOWING_DESKTOP. 13

其他根窗口消息. 13

1._NET_CLOSE_WINDOW.. 13

2._NET_MOVERESIZE_WINDOW.. 14

3._NET_WM_MOVERESIZE. 14

4._NET_RESTACK_WINDOW.. 16

5._NET_REQUEST_FRAME_EXTENTS. 16

应用窗口属性. 17

1._NET_WM_NAME. 17

2._NET_WM_VISIBLE_NAME. 17

3._NET_WM_ICON_NAME. 17

4._NET_WM_VISIBLE_ICON_NAME. 17

5._NET_WM_DESKTOP. 17

6._NET_WM_WINDOW_TYPE. 18

7._NET_WM_STATE. 20

8._NET_WM_ALLOWED_ACTIONS. 22

9._NET_WM_STRUT. 24

10._NET_WM_STRUT_PARTIAL. 24

11._NET_WM_ICON_GEOMETRY. 25

12._NET_WM_ICON.. 25

13._NET_WM_PID. 25

14._NET_WM_HANDLED_ICONS. 25

15._NET_WM_USER_TIME. 26

16._NET_WM_USER_TIME_WINDOW.. 26

17._NET_FRAME_EXTENTS. 26

18._NET_WM_OPAQUE_REGION.. 27

19._NET_WM_BYPASS_COMPOSITOR. 27

其他属性. 30

_NET_WM_FULL_PLACEMENT. 30

组合管理器. 30

_NET_WM_CM_Sn Manager Selection. 30

WM_TRANSIENT_FOR for override-redirect windows. 30

实施说明. 31

桌面/工作区模型... 31

文件管理器桌面... 31

对应用瞬时窗口实施增强支持... 31

紧迫性... 31

固定尺寸的窗户... 31

寻呼机和任务栏... 32

窗口位置... 32

窗口内 MDI 34

杀洪过程... 34

堆叠顺序... 35

请求中的源指示... 36

更改历史记录. 36

自 1.4 起草以来的变化... 36

自 1.3 以来的变化... 36

自 1.2 以来的变化... 37

自 1.1 以来的变化... 37

自1.0以来的变化... 38

自1.0pre5以来的变化... 38

自1.0pre4以来的变化... 38

自1.0pre3以来的变化... 39

自1.0pre2以来的变化... 39

自1.0pre1以来的变化... 40

自1.9f以来的变化... 40

自1.9e以来的变化... 40

自1.9d以来的变化... 40

自1.9c以来的变化... 40

自1.9b以来的变化... 41

介绍

1.版本

这是扩展窗口管理器提示 (EWMH) 规格,已更新。此文档的规范主页为http://www.freedesktop.org,其中还包含报告错误或为未来版本做出贡献的方向。

2.这是什么规格?

此规范定义了窗口管理器、组合管理器、应用程序和构成桌面环境一部分的公用设施之间的相互作用。它建立在客户间通信公约手册(ICCCM)的基础上,该手册定义了较低级别的窗口管理器交互。ICCCM 没有提供实现现代桌面用户期望的许多功能的方法。GNOME 和 KDE 桌面项目最初自行开发了对 ICCCM 的扩展,以支持这些功能:此规范将这些自定义扩展替换为任何桌面环境都可以采用的标准化 ICCCM 扩展集。

3.本规范中使用的语言

本文件中的"必须"、"不得"、"必须"、"应"、"应"、"不应"、"推荐"、"可能"和"可选"等关键词将解释为 RFC 2119 中所述。

关键字“窗口管理器”是指采用本规范的窗口管理器“寻呼机”是指桌面实用程序,包括寻呼机和任务栏“应用程序”指其他客户端“客户机”指寻呼机和应用程序,即除窗口管理器外的所有X客户机。

4.采用此规范的先决条件

旨在满足此规范的窗口管理和客户端必须遵守本规范构建的 ICCCM。如果此规范明确修改 ICCCM 窗口管理器和客户端必须完成这些修改。

非 ICCM 功能

有许多窗口管理特性或行为没有在ICCCM中指定,但是在现代窗口管理器和桌面环境中通常会遇到。

1.Additional States

ICCCM允许窗口管理器实现额外的窗口状态,这些状态在客户机中显示为NormalState和IconicState的子状态。两个常见的例子是最大化和阴影。窗口管理器可以将这些实现为NormalState和IconicState的适当子状态,或者可以将它们视为独立的标志,允许例如最大化的窗口被图标化并且在去图标化时重新显示为最大化。

2.最大化

最大化是窗口管理器的一个非常古老的特性。在早期的ICCCM草案中甚至出现了ZoomedState。最大化一个窗口应该给它尽可能多的屏幕区域(这可能不是全屏区域,而只是一个较小的“工作区”,因为窗口管理器可能为其他窗口保留了某些区域)。窗口管理器需要记住最大化窗口的几何图形,并在取消最大化时恢复它。现代窗口管理器通常允许单独的水平和垂直最大化。

随着Xinerama扩展在x11r6.4中的引入,最大化变得越来越重要。Xinerama允许屏幕以自由配置的几何图形跨越多个监视器。在这样的设置中,最大化一个窗口在理想情况下不会使其增长到填满整个屏幕,而只会使其显示在显示器上。当然,对于跨越监视器边界的窗口来说,也有一些边界情况,而“真正的”全屏最大化有时可能是有用的。

3.阴影

一些桌面环境提供了阴影(也称为卷起)作为图标化的替代方案。阴影窗口通常只显示标题栏,客户端窗口将被隐藏,因此,对于未用标题栏装饰的窗口,阴影没有用。

4.模式

ICCCM的 WM_TRANSIENT_FOR提示允许客户在客户完成之前指定可以关闭顶层窗口。瞬态窗口的一个典型示例是对话框。当用户继续在主窗口中工作时,某些对话框可以长时间打开。在用户可以继续在主窗口中工作之前,必须关闭其他对话框,这种特性称为模态。虽然客户端可以使用全局活动输入模型以符合ICCCM的方式实现模态窗口,但是一些窗口管理器提供了处理模态的支持。

5.大型桌面

窗口管理器可以在比根窗口大的桌面上安排托管窗口。屏幕在这个大桌面上起着视口的作用。可以实施关于桌面上视口位置的不同策略:窗口管理器可能只允许视口位置以屏幕大小的增量更改(分页),也可能允许任意位置(滚动)。

为了实现ICCCM的原则,即无论窗口管理器是否运行,客户端的行为都应该相同,实现大型桌面的窗口管理器必须解释客户端提供的与当前视口相关的所有几何图形。

6.实施说明

实现大型桌面有两种选择:第一种是将托管窗口(或者,如果是还原时,保留其框架)作为根窗口的子窗口。移动视口是通过将所有托管窗口向相反方向移动来实现的。

第二种方法是将所有托管窗口重新分配给专用的大窗口(有些不恰当地称为"虚拟根")。然后,通过向相反方向移动虚拟根来移动视口。

这两种方法都完全符合ICCCM,尽管第二种方法对于试图找出顶层窗口周围的窗口管理器装饰的客户端和试图在根窗口上绘制背景图像的客户端来说可能有些问题。

7.固定的窗口

实现大桌面的窗口管理器通常为用户提供一种方法,使某些窗口“粘在玻璃上”,即当视口移动时,这些窗口将保持在屏幕上的相同位置。

8.虚拟桌面

大多数X服务器只有一个屏幕。窗口管理器可以虚拟化这个资源,并提供多个所谓的“虚拟桌面”,其中一次只能在屏幕上显示一个。虚拟机实现的特性有一些不同。可以有固定数量的桌面,也可以动态创建新的桌面。桌面的大小可以是固定的,也可以是可变的。如果桌面大于根窗口,则它们的视口(请参阅 the section called “Large Desktops”)可能是独立的或被迫位于同一位置。

实现虚拟桌面的窗口管理器通常为用户提供一种在桌面之间移动客户端的方法。客户端可以同时占用多个桌面。

9.实施说明

实现虚拟桌面至少有两个选项。第一种方法是使用多个虚拟根(请参阅“Implementation note”一节),并通过操纵虚拟根的堆叠顺序来更改当前桌面。这是完全符合ICCCM的,但有the section called “Implementation note”一节中概述的问题

第二个选项是将所有托管窗口保留为根窗口的子窗口,并取消映射那些不在当前桌面上的窗口的帧。根据ICCCM,未映射的窗口应置于图标状态。实际图标化或最小化的窗口应设置 _NET_WM_STATE_HIDDEN属性,以便与寻呼机通信,说明该窗口不应表示为“屏幕上”

10.分页器

分页器为窗口管理器提供了不同的UI。它显示了由小矩形表示托管窗口的桌面(s)的微型视图,并允许用户通过操作这些表示来启动各种窗口管理器操作。通常提供的操作是激活(请参见“激活”一节)、移动、重新启动、图标化、最大化和关闭。在大型桌面上,分页器可以提供移动视口的方法。在虚拟桌面上,分页器可以提供在桌面之间移动窗口和更改当前桌面的方法。

11.任务栏

任务栏提供了另一个窗口管理任务UI。它通常将客户端窗口表示为一个带有窗口标题和可能图标的按钮列表。按下按钮可在所表示窗口上启动窗口管理器操作,典型操作是激活和图标化。在具有任务栏的环境中,图标通常被认为不合适,因为图标化的窗口已经在任务栏中表示。

12.激活

在X世界中,激活窗口意味着为其提供输入焦点。如果窗口未映射,则可能无法做到这一点,因为它位于不同的桌面上。因此,激活窗口可能涉及其他步骤,如将其移动到当前桌面(或更改为窗口打开的桌面)、使其锐化或置顶它。

13.动画图标化

有些窗口管理器在(取消)图标化窗口时显示某种形式的动画。这可能是连接窗口的角落与图标的角落或窗口可能不透明地移动和重新定位的一些轨迹连接窗口位置和图标位置的线条图纸。

14.窗口MDI中的窗口

窗口MDI中的窗口是一个多文档界面,从MS Windows平台中可以知道。使用它的程序有一个顶层窗口,其中包含一个工作区,其中包含打开文档的子窗口。这些子窗口用窗口管理器框架装饰,可以在其父窗口中进行操作,就像根窗口上的普通顶级窗口一样。

15.覆盖重定向窗口

传统的窗口管理器忽略覆盖重定向窗口,但不通过组合管理器忽略。组合管理器负责将所有窗口绘制到屏幕,包括覆盖重定向窗口。

要使组合管理器能够正确装饰覆盖重定向窗口,例如通过使它们半透明或通过更改窗口的形状,此规范允许客户端在指示窗口功能的覆盖重定向窗口上设置属性。

16.分层堆放顺序

有些窗口管理器将顶层窗口保留在一个线性堆栈中,而是将堆栈细分为若干层。分层堆叠顺序实现的特性之间存在很大的差异。层数可能是固定的,也可能不固定的。顶层窗口的层可以是显式的,直接可修改的,或者从窗口的其他属性(例如窗口的类型)派生而来。堆叠顺序可能是严格的,也可能不严格,即不允许用户将窗口升高或降低到其层外。

17.本规范范围

此规范尝试解决以下问题:

允许客户机在最大化、阴影、粘性、桌面、堆叠顺序等方面影响其初始状态。

通过允许客户机提示窗口管理器窗口类型,提高窗口管理器更改窗口装饰和维护堆叠顺序的能力。

提高组合管理器应用装饰和效果覆盖重定向窗口的能力

启用分页器和任务栏作为独立的客户端实现,并允许它们与任何兼容的窗口管理器一起工作。

本规范不包括以下任何一项:

其他IPC机制,如ICE或Corba。

Windows manager配置。

窗口管理器文档。

出现在桌面的适当子集上的客户端。

窗口MDI中的窗口。

窗口管理器应该负责窗口管理策略,这样无论是谁编写客户端,用户屏幕上都有一致的行为。

规范提供了许多关于WindowManager操作的外部控制。这主要是为了允许分页器、taskbars和类似的WindowManager UI作为独立的客户机实现。”普通的“客户机不应该使用这些,除非可能是响应直接用户请求(即设置一个config选项以开始最大化或指定一个-desk n命令行参数)。

根窗口属性(和相关消息)

每当本规范谈到"向根窗口发送消息"时,请理解客户端应创建具有指定内容的客户端邮件事件,并使用带有以下参数的 SendEvent 请求发送:

destinationroot

propagateFalse

event-mask(SubstructureNotify|SubstructureRedirect)

eventthe specified ClientMessage

1._NET_SUPPORTED

_NET_SUPPORTED, ATOM[]/32

此属性必须由窗口管理器设置,以指示它支持哪些提示。例如:考虑到_NET_WM_STATE,将列出此原子和所有支持的状态,(如_NET_WM_STATE_MODAL,_NET_WM_STATE_STICKY)这假定不会对提示进行向后不兼容的更改(未重命名)。

2._NET_CLIENT_LIST

_NET_CLIENT_LIST, WINDOW[]/32

_NET_CLIENT_LIST_STACKING, WINDOW[]/32

这些数组包含由窗口管理器管理的所有 X 窗口。_NET_CLIENT_LIST具有初始映射顺序,从最古老的窗口开始。_NET_CLIENT_LIST_STACKING有自下而上的堆叠顺序。这些属性应由窗口管理器设置和更新。

3._NET_NUMBER_OF_DESKTOPS

_NET_NUMBER_OF_DESKTOPS, CARDINAL/32

此属性应由窗口管理器设置和更新,以指示虚拟桌面的数量。

分页器可以通过向根窗口发送_NET_NUMBER_OF_DESKTOPS消息来请求更改桌面数量:

_NET_NUMBER_OF_DESKTOPS

  message_type = _NET_NUMBER_OF_DESKTOPS

  format = 32

  data.l[0] = new_number_of_desktops

  other data.l[] elements = 0

窗口管理器可以接受或拒绝此请求。如果请求得到接受,_NET_NUMBER_OF_DESKTOPS必须设置为新的桌面数量, _NET_VIRTUAL_ROOTS设置存储新的桌面虚拟根窗口 ID 和_NET_DESKTOP_VIEWPORT,还必须相应更改_NET_WORKAREA。_NET_DESKTOP_NAMES属性可能保持不变。

如果桌面数量正在减少,并且_NET_CURRENT_DESKTOP 超出了可用桌面的新范围,则必须将其设置为新集合中的最后一个可用桌面。仍然存在于新范围之外的桌面上的客户端必须从新集合移到最后一个桌面。对于_NET_WM_DESKTOP,必须更新桌面。

4._NET_DESKTOP_GEOMETRY

_NET_DESKTOP_GEOMETRY width, height, CARDINAL[2]/32

两个基数的数组,定义所有桌面的公共大小(如果窗口管理器不支持大型桌面,则等于屏幕大小,否则等于桌面的虚拟大小)。此属性应由窗口管理器设置。

寻呼机可以通过向根窗口发送_NET_DESKTOP_GEOMETRY客户端消息来请求桌面几何形状的更改:

_NET_DESKTOP_GEOMETRY

  message_type = _NET_DESKTOP_GEOMETRY

  format = 32

  data.l[0] = new_width

  data.l[1] = new_height

  other data.l[] elements = 0

窗口管理器可能会选择忽略此消息,在这种情况下,_NET_DESKTOP_GEOMETRY属性将保持不变。

5._NET_DESKTOP_VIEWPORT

_NET_DESKTOP_VIEWPORT x, y, CARDINAL[][2]/32

定义每个桌面视口左上角的基数对数组。对于不支持大型桌面的窗口管理器,必须始终将其设置为(0,0)。

寻呼机可以通过向根窗口发送_NET_DESKTOP_VIEWPORT客户端消息来请求更改当前桌面的视口:

_NET_DESKTOP_VIEWPORT

  message_type = _NET_DESKTOP_VIEWPORT

  format = 32

  data.l[0] = new_vx

  data.l[1] = new_vy

  other data.l[] elements = 0

窗口管理器可能会选择忽略此消息,在这种情况下,_NET_DESKTOP_VIEWPORT属性将保持不变。

6._NET_CURRENT_DESKTOP

_NET_CURRENT_DESKTOP desktop, CARDINAL/32

当前桌面的索引。这始终是 0 和 _NET_NUMBER_OF_DESKTOPS - 1 之间的整数。这必须由窗口管理器设置和更新。如果寻呼机想要切换到其他虚拟桌面,则必须向根窗口发送_NET_CURRENT_DESKTOP客户端消息:

_NET_CURRENT_DESKTOP

  message_type = _NET_CURRENT_DESKTOP

  format = 32

  data.l[0] = new_index

  data.l[1] = timestamp

  other data.l[] elements = 0

请注意,使用此规格的旧版本的客户端的时间戳可能是 0,在这种情况下,应忽略时间戳字段。

7._NET_DESKTOP_NAMES

_NET_DESKTOP_NAMES, UTF8_STRING[]

所有虚拟桌面的名称。这是 UTF-8 编码[UTF8]中已终止的 NULL 字符串列表。此属性可能随时由寻呼机或窗口管理器更改。

注:名字数量可能与_NET_NUMBER_OF_DESKTOPS不同。如果少于_NET_NUMBER_OF_DESKTOPS,则数字较高的桌面将未命名。如果它大于_NET_NUMBER_OF_DESKTOPS,则考虑保留_NET_NUMBER_OF_DESKTOPS外的多余名称,以防桌面数量增加。

理由:名称不是虚拟桌面的必要属性。因此,名称的可用性或不可用性对虚拟桌面功能没有影响。由于名称由用户设置,并且用户可能会预设固定数量的桌面名称,因此当可用桌面数量发生变化时,缩小或增加此列表是没有意义的。

8._NET_ACTIVE_WINDOW

_NET_ACTIVE_WINDOW, WINDOW/32

当前活动窗口的窗口ID,如果没有窗口具有焦点,则为无。这是由窗口管理器设置的只读属性。如果客户端想要激活另一个窗口,则必须向根窗口发送_NET_ACTIVE_WINDOW客户端消息:

_NET_ACTIVE_WINDOW

  window  = window to activate

  message_type = _NET_ACTIVE_WINDOW

  format = 32

  data.l[0] = source indication

  data.l[1] = timestamp

  data.l[2] = requestor's currently active window, 0 if none

  other data.l[] elements = 0

请求来自应用程序时,源指示应为 1,当请求来自寻呼机时,源指示应为 2。使用旧版此规格的客户端使用 0 作为源指示,请参阅称为"请求中的源指示"的部分以获取详细信息。时间戳是客户端请求时的最后一个用户活动时间戳(参见_NET_WM_USER_TIME),当前活动窗口是客户端的顶层窗口(如果有的话(窗口管理器可能更可能服从请求,如果这意味着将焦点从一个活动窗口转移到另一个)。

根据消息提供的信息,窗口管理器可能会决定拒绝请求(要么完全忽略请求,要么使用_NET_WM_STATE_DEMANDS_ATTENTION)。

9._NET_WORKAREA

_NET_WORKAREA, x, y, width, height CARDINAL[][4]/32

此属性必须在计算每个桌面的工作区域后由窗口管理器设置。包含每个桌面的几何形状。这些几何形状与每个桌面上的视图端口相对指定,并指定完全包含在视图端口中的区域。桌面应用程序应使用工作区域来适当放置桌面图标。

窗口管理器应该通过当前页面减去dock和panel窗口占用的空间来计算这个空间,如客户端窗口上设置的_NET_WM_STRUT_NET_WM_STRUT_PARTIAL属性所示。

10._NET_SUPPORTING_WM_CHECK

_NET_SUPPORTING_WM_CHECK, WINDOW/32

窗口管理器必须将此属性设置在根窗上,使其成为由自己创建的子窗口的 ID,以指示合规的窗口管理器处于活动状态。子窗口还必须将_NET_SUPPORTING_WM_CHECK属性设置为子窗口的 ID。子窗口还必须将_NET_WM_NAME属性设置为窗口管理器的名称。

理由:子窗口用于区分活动窗口管理器和碰巧指向另一个窗口的陈旧_NET_SUPPORTING_WM_CHECK属性。如果客户端窗口上的_NET_SUPPORTING_WM_CHECK窗口丢失或未正确设置,则客户应假设不存在符合要求的窗口管理器。

11._NET_VIRTUAL_ROOTS

_NET_VIRTUAL_ROOTS, WINDOW[]/32

为了实现虚拟桌面,一些窗口管理器将客户端窗口还给根窗口的孩子。使用此技术的窗口管理器必须将此属性设置为充当虚拟根窗口的窗口的 ID 列表。此属性允许背景设置程序与虚拟根一起工作,并允许客户了解其窗口的窗口管理器框架窗口。

12._NET_DESKTOP_LAYOUT

_NET_DESKTOP_LAYOUT, orientation, columns, rows, starting_corner CARDINAL[4]/32

  #define _NET_WM_ORIENTATION_HORZ 0

  #define _NET_WM_ORIENTATION_VERT 1

  #define _NET_WM_TOPLEFT0

  #define _NET_WM_TOPRIGHT1

  #define _NET_WM_BOTTOMRIGHT 2

  #define _NET_WM_BOTTOMLEFT  3

此属性由寻呼机设置,而不是由窗口管理器设置。 设置此属性时,寻呼机必须拥有选择管理器(ICCCM 2.8 中的定义)。选择管理器称为“网络桌面布局”,其中是屏幕编号。此属性的目的是让窗口管理器知道寻呼机显示的桌面布局。

nn

_NET_DESKTOP_LAYOUT描述了虚拟桌面相对的布局。更具体地说,它描述了选择管理器的所有者使用的布局。窗口管理器可以使用此布局信息,也可以选择忽略它。该属性包含四个值:寻呼机方向、X 方向的桌面数量、Y 方向的编号以及布局的起始角,即包含第一台桌面的角落。

注意:为了与实施本文档早期草稿的寻呼机进行互操作,窗口管理器应接受长度为 3 的_NET_DESKTOP_LAYOUT属性,并在本案例中使用_NET_WM_TOPLEFT作为起点。

虚拟桌面被安排成一个带有行和列的矩形。如果时间与_NET_NUMBER_OF_DESKTOPS指定的桌面总数不符,则假设最高编号的工作空间不存在。其中一个或(但不是两个)可以指定为0,在这种情况下,其实际价值将来自_NET_NUMBER_OF_DESKTOPS。

rowscolumnsrowscolumnsrowscolumns

当方向被_NET_WM_ORIENTATION_HORZ桌面被排成一排,第一个桌面在指定的起始角。因此,从_NET_WM_ 角开始的四列和三行布局看起来是这样的:

 +--+--+--+--+

 | 0| 1| 2| 3|

 +--+--+--+--+

 | 4| 5| 6| 7|

 +--+--+--+--+

 | 8| 9|10|11|

 +--+--+--+--+

有了starting_corner _NET_WM_BOTTOMRIGHT,它看起来像这样:

 +--+--+--+--+

 |11|10| 9| 8|

 +--+--+--+--+

 | 7| 6| 5| 4|

 +--+--+--+--+

 | 3| 2| 1| 0|

 +--+--+--+--+

当方向被_NET_WM_ORIENTATION_VERT布局与四列和三行从_NET_WM_TOPLEFT角开始看起来像:

 +--+--+--+--+

 | 0| 3| 6| 9|

 +--+--+--+--+

 | 1| 4| 7|10|

 +--+--+--+--+

 | 2| 5| 8|11|

 +--+--+--+--+

有了starting_corner _NET_WM_TOPRIGHT,它看起来像:

 +--+--+--+--+

 | 9| 6| 3| 0|

 +--+--+--+--+

 |10| 7| 4| 1|

 +--+--+--+--+

 |11| 8| 5| 2|

 +--+--+--+--+

这里的数字是桌面号码,至于_NET_CURRENT_DESKTOP。

13._NET_SHOWING_DESKTOP

_NET_SHOWING_DESKTOP desktop, CARDINAL/32

某些 Windows 管理器具有隐藏窗口的"显示桌面"模式,并显示桌面背景聚焦于该模式。如果窗口管理器支持_NET_SHOWING_DESKTOP提示,则当窗口管理器处于"显示桌面"模式时,它必须将其设置为 1 值,如果窗口管理器不处于此模式,则值为零。

如果寻呼机想要输入或离开该模式,则必须向请求更改的根窗口发送_NET_SHOWING_DESKTOP客户端消息:

_NET_SHOWING_DESKTOP

  message_type = _NET_SHOWING_DESKTOP

  format = 32

  data.l[0] = boolean 0 or 1

  other data.l[] elements = 0

窗口管理器可能会选择忽略此客户端消息。

其他根窗口消息

1._NET_CLOSE_WINDOW

_NET_CLOSE_WINDOW

想要关闭窗口的寻呼机必须向根窗口发送_NET_CLOSE_WINDOW客户端消息请求:

_NET_CLOSE_WINDOW

  window = window to close

  message_type = _NET_CLOSE_WINDOW

  format = 32

  data.l[0] = timestamp

  data.l[1] = source indication

  other data.l[] elements = 0

然后,窗口管理器必须尝试关闭指定的窗口。有关源指示的详细信息,请参阅称为"请求中的来源指示"的部分

理由:窗口管理器可能比通常的方法更聪明(如果选择了协议,则发送WM_DELETE消息,否则发送XKillClient消息)。例如,它可能会引入超时。窗口管理器可以轻松完成该工作,而不是复制代码。

2._NET_MOVERESIZE_WINDOW

_NET_MOVERESIZE_WINDOW

  window = window to be moved or resized

  message_type = _NET_MOVERESIZE_WINDOW

  format = 32

  data.l[0] = gravity and flags

  data.l[1] = x

  data.l[2] = y

  data.l[3] = width

  data.l[4] = height

数据的低分节.l[0]包含要使用的重力;它可能包含WM_SIZE_HINTS.win_重力属性允许的任何值:西北(1)、北(2)、东北(3)、西(4)、中心(5)、东(6)、西南(7)、南(8)、东南(9)和静态(10)。0 的重力表示窗口管理器应使用WM_SIZE_HINTS.win_重力中指定的重力。位 8 到 11 表示 x、y、宽度和高度的存在。位 12 到 15 表示源(参见称为"请求中的源指示"的部分),因此 0001 表示应用程序,0010 表示寻呼机或任务栏。剩余位应设置为零。

想要移动或调整窗口大小的寻呼机可能会将_NET_MOVERESIZE_WINDOW客户端消息请求发送到根窗口,而不是使用配置请求。

窗口管理器应将_NET_MOVERESIZE_WINDOW 消息与ConfigureRequest完全相同(特别是,遵守有关合成ConfigureNotify事件的ICCCM规则),但它们应使用消息中指定的重力。

理由:使用带有StaticGravity的 _NET_MOVERESIZE_WINDOW 消息,寻呼机可以准确地定位和调整窗口(包括其装饰)的大小,而不知道装饰的大小。

3._NET_WM_MOVERESIZE

_NET_WM_MOVERESIZE

  window = window to be moved or resized

  message_type = _NET_WM_MOVERESIZE

  format = 32

  data.l[0] = x_root

  data.l[1] = y_root

  data.l[2] = direction

  data.l[3] = button

  data.l[4] = source indication

此消息允许客户端启动窗口移动或调整大小。它们可以定义自己的移动和大小“夹点”,同时让窗口管理器控制实际操作。这意味着所有移动/调整大小都可以按照窗口管理器的定义以一致的方式进行。有关源指示的详细信息,请参阅 the section called “Source indication in requests”部分。

当发送此消息以响应按钮按下事件时,按钮应指示按下的按钮,x root和y root必须指示按钮按下相对于根窗口的位置,方向必须指示这是移动事件还是调整大小事件,如果是调整大小事件,窗口的哪些边将显示大小夹点适用于。发送此消息以响应按键事件时,方向必须指示这是移动还是调整大小事件,并且其他字段未使用。

#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT0

#define _NET_WM_MOVERESIZE_SIZE_TOP1

#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT2

#define _NET_WM_MOVERESIZE_SIZE_RIGHT3

#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT  4

#define _NET_WM_MOVERESIZE_SIZE_BOTTOM5

#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT6

#define _NET_WM_MOVERESIZE_SIZE_LEFT7

#define _NET_WM_MOVERESIZE_MOVE8/* movement only */

#define _NET_WM_MOVERESIZE_SIZE_KEYBOARD9/* size via keyboard */

#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD10/* move via keyboard */

#define _NET_WM_MOVERESIZE_CANCEL11/* cancel operation */

客户端必须在发送此类消息之前发布所有抓取(_NET_WM_MOVERESIZE_CANCEL消息除外)。

窗口管理器可以使用按钮字段来确定它终止由_NET_WM_MOVERESIZE消息启动的操作的事件。由于发送_NET_WM_MOVERESIZE消息的客户端与发布按钮的用户之间存在竞争条件,因此建议 Window 管理器提供终止操作的其他方法,例如按下 ESC 密钥。特殊值_NET_WM_MOVERESIZE_CANCEL还允许客户端在检测到发布时通过发送此类消息来取消操作(如果客户在发送移动大小消息后获得按钮发布,客户应发送该消息,表明 WM 没有及时获得发布)。

4._NET_RESTACK_WINDOW

_NET_RESTACK_WINDOW

要重新标记窗口的寻呼机应向根窗口发送 _NET_RESTACK_WINDOW客户端消息请求:

_NET_RESTACK_WINDOW

  window = window to restack

  message_type = _NET_RESTACK_WINDOW

  format = 32

  data.l[0] = source indication

  data.l[1] = sibling window

  data.l[2] = detail

  other data.l[] elements = 0

此请求类似于带有CWSibling和CWStackMode标志的ConfigureRequest。它只能由寻呼机使用,应用程序可以使用正常的配置请求。因此,源指示字段应设置为2,有关详细信息,请参阅“请求中的源指示”部分。

理由:窗口管理器可能会对来自应用程序的配置请求施加限制,例如,在某些情况下,它可能会拒绝提出窗口。这个请求表明它来自寻呼机或类似的工具,因此窗口管理器应该始终遵守它。

5._NET_REQUEST_FRAME_EXTENTS

_NET_REQUEST_FRAME_EXTENTS

  window = window for which to set _NET_FRAME_EXTENTS

  message_type = _NET_REQUEST_FRAME_EXTENTS

尚未映射窗口的客户端可以估计请求窗口管理器在映射时将给出的帧范围。要检索此类估计值,客户端必须向根窗口发送_NET_REQUEST_FRAME_EXTENTS消息。窗口管理器必须通过估计预期帧范围并相应地设置窗口的_NET_FRAME_EXTENTS属性来响应。客户必须处理由此产生的_NET_FRAME_EXTENTS属性通知事件。因此,窗口管理器具有良好的估计基础,客户端必须在发送此消息之前设置它打算设置的任何窗口属性。客户必须能够应付不完美的估计。

理由:客户端无法在映射窗口之前计算其窗口框架的尺寸,但某些工具包需要此信息。向窗口管理器询问对范围的估计是可行的解决方案。估计值可能取决于当前主题、字体大小或其他窗口属性。客户端可以通过收听_NET_FRAME_EXTENTS属性通知事件来跟踪帧尺寸的变化。

应用窗口属性

1._NET_WM_NAME

_NET_WM_NAME, UTF8_STRING

客户端应将此设置为 UTF-8 编码中的窗口标题。如果设置,窗口管理器应使用此优先于WM_NAME。

2._NET_WM_VISIBLE_NAME

_NET_WM_VISIBLE_NAME, UTF8_STRING

如果窗口管理器显示_NET_WM_NAME窗口管理器必须将此设置为 UTF-8 编码中显示的标题。

理由:此属性用于显示不同于窗口_NET_WM_NAME或WM_NAME的窗口经理(即 xterm =lt;1+,xterm =lt;lt;2],显示,但_NET_WM_NAME/WM_NAME仍然是每个窗口的xterm),从而允许寻呼机显示与窗口管理器相同的标题。

3._NET_WM_ICON_NAME

_NET_WM_ICON_NAME, UTF8_STRING

客户端应将此设置为 UTF-8 编码中此窗口的图标标题。如果设置,窗口管理器应使用此优先于WM_ICON_NAME。

4._NET_WM_VISIBLE_ICON_NAME

_NET_WM_VISIBLE_ICON_NAME, UTF8_STRING

如果窗口管理器显示_NET_WM_ICON_NAME则窗口管理器必须将此设置为 UTF-8 编码中显示的标题。

5._NET_WM_DESKTOP

_NET_WM_DESKTOP desktop, CARDINAL/32

以确定窗口所在(或想要)的桌面,第一个桌面从0开始。客户机可以选择不设置此属性,在这种情况下,窗口管理器应该按自己的意愿放置它。0xffffff表示该窗口应出现在所有桌面上。

每当撤回的窗口请求映射时,窗口管理器应接受_NET_WM_DESKTOP。

窗口管理器应在取出窗口时移除该属性,但在关闭时应保留该属性,例如,为响应失去对WM_Sn选择管理的所有权。

理由:在退出窗口时删除属性有助于希望重用已退出窗口的旧应用程序。关闭时不删除属性允许下一个窗口管理器将窗口还原到以前的桌面。

客户端可以通过向根窗口发送_NET_WM_DESKTOP客户端消息来请求更改未撤回窗口的桌面:

_NET_WM_DESKTOP

  window  = the respective client window

  message_type = _NET_WM_DESKTOP

  format = 32

  data.l[0] = new_desktop

  data.l[1] = source indication

  other data.l[] elements = 0

有关源指示的详细信息,请参阅称为"请求中的来源指示"的部分。窗口管理器必须在所有窗口上更新此属性。

6._NET_WM_WINDOW_TYPE

_NET_WM_WINDOW_TYPE, ATOM[]/32

这应由客户端在映射到指示窗口功能类型的原子列表之前设置。该属性应由窗口管理器用于确定窗户的装饰、堆叠位置和其他行为。客户端应按偏好顺序指定窗口类型(第一个是最可取的),但必须从下面的列表中至少包括一个基本窗口类型原子。这是允许扩展类型列表,同时为不识别扩展的窗口管理器提供默认行为。

此提示还应设置为覆盖重定向窗口,以便组合管理器在菜单、工具提示等上应用一致的装饰。

理由:此提示旨在替换 MOTIF 提示。对MOTIF提示的反对之一是它们纯粹是窗户装饰的视觉描述。通过描述窗户的功能,窗口管理器可以将一致的装饰和行为应用于同类型的窗户。行为的可能示例包括将dock/panels保持在顶部或仅允许在另一个窗口对焦时隐藏可固定的 menus / toolbars (NextStep style)。

_NET_WM_WINDOW_TYPE_DESKTOP, ATOM

_NET_WM_WINDOW_TYPE_DOCK, ATOM

_NET_WM_WINDOW_TYPE_TOOLBAR, ATOM

_NET_WM_WINDOW_TYPE_MENU, ATOM

_NET_WM_WINDOW_TYPE_UTILITY, ATOM

_NET_WM_WINDOW_TYPE_SPLASH, ATOM

_NET_WM_WINDOW_TYPE_DIALOG, ATOM

_NET_WM_WINDOW_TYPE_DROPDOWN_MENU, ATOM

_NET_WM_WINDOW_TYPE_POPUP_MENU, ATOM

_NET_WM_WINDOW_TYPE_TOOLTIP, ATOM

_NET_WM_WINDOW_TYPE_NOTIFICATION, ATOM

_NET_WM_WINDOW_TYPE_COMBO, ATOM

_NET_WM_WINDOW_TYPE_DND, ATOM

_NET_WM_WINDOW_TYPE_NORMAL, ATOM

_NET_WM_WINDOW_TYPE_DESKTOP表示桌面功能。这可以包括一个包含与屏幕尺寸相同的桌面图标的单个窗口,使桌面环境能够完全控制桌面,而无需代理根窗口点击。

_NET_WM_WINDOW_TYPE_DOCK表示停靠点或面板功能。通常,窗口管理器会将此类窗口保留在所有其他窗口的顶部。

_NET_WM_WINDOW_TYPE_TOOLBAR和_NET_WM_WINDOW_TYPE_MENU分别指示工具栏和可固定菜单窗口(即从主应用程序“撕下”的工具栏和菜单)。这种类型的窗口可以设置WM_TRANSIENT_FOR作为指示主应用程序窗口的提示。请注意,_NET_WM_WINDOW_TYPE_MENU应设置在拆下的托管窗口上,其中通常用于覆盖重定向窗口上的_NET_WM_WINDOW_TYPE_DROPDOWN_MENU和_NET_WM_WINDOW_TYPE_POPUP_MENU。

_NET_WM_WINDOW_TYPE_UTILITY表示一个小的持久性实用窗口,如调色板或工具箱。它不同于类型 TOOLBAR,因为它不对应于从主应用程序中拆下的工具栏。它不同于类型对话,因为它不是一个瞬时对话,用户可能会保持开放,而他们正在工作。此类类型的窗口可能会设置指示主应用窗口的WM_TRANSIENT_FOR提示。

_NET_WM_WINDOW_TYPE_SPLASH表示该窗口是应用程序启动时显示的启动屏幕。

_NET_WM_WINDOW_TYPE_DIALOG表示这是一个对话窗口。如果不设置_NET_WM_WINDOW_TYPE,则必须将带有WM_TRANSIENT_FOR集的管理窗口视为此类窗口。带有WM_TRANSIENT_FOR的重定向窗口,但没有_NET_WM_WINDOW_TYPE必须被视为_NET_WM_WINDOW_TYPE_NORMAL。

_NET_WM_WINDOW_TYPE_DROPDOWN_MENU表示所讨论的窗口是下拉菜单,即用户单击菜单栏时通常显示的菜单类型,而不是用户右键单击对象时通常显示的弹出菜单。此属性通常用于覆盖重定向窗口。

_NET_WM_WINDOW_TYPE_POPUP_MENU表示所讨论的窗口是弹出式菜单,即用户右键单击对象时通常显示的菜单类型,而不是用户单击菜单栏时通常显示的下拉菜单。此属性通常用于覆盖重定向窗口。

_NET_WM_WINDOW_TYPE_TOOLTIP表示所讨论的窗口是一个toultip,即,一个简短的解释文本,通常出现在鼠标光标悬停在一个对象上一段时间后。此属性通常用于覆盖重定向窗口。

_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 瞬态设置的托管windows视为此类型。无论是否设置WM_TRANSIENT_FOR ,都必须将不带_NET_WM_WINDOW_TYPE的重写重定向窗口视为此类型。

7._NET_WM_STATE

_NET_WM_STATE, ATOM[]

描述窗口状态的提示列表。列表中存在的原子必须被视为设置,不在列表中的原子必须被视为未设置。每当撤回的窗口请求映射时,窗口管理器应尊重_NET_WM_STATE。希望更改窗口状态的客户必须向根窗口发送_NET_WM_STATE客户端消息(见下文)。窗口管理器必须更新此属性以反映窗口的当前状态。

每当窗口被撤销时,窗口管理器应移除该属性,但在关闭时应保留该属性,例如,为响应失去WM_Sn选择管理器的所有权。

理由:在退出窗口时删除属性有助于希望重用已退出窗口的旧应用程序。关闭时不删除属性允许下一个窗口管理器将窗口恢复到以前的状态。

可能的原子是:

_NET_WM_STATE_MODAL, ATOM

_NET_WM_STATE_STICKY, ATOM

_NET_WM_STATE_MAXIMIZED_VERT, ATOM

_NET_WM_STATE_MAXIMIZED_HORZ, ATOM

_NET_WM_STATE_SHADED, ATOM

_NET_WM_STATE_SKIP_TASKBAR, ATOM

_NET_WM_STATE_SKIP_PAGER, ATOM

_NET_WM_STATE_HIDDEN, ATOM

_NET_WM_STATE_FULLSCREEN, ATOM

_NET_WM_STATE_ABOVE, ATOM

_NET_WM_STATE_BELOW, ATOM

_NET_WM_STATE_DEMANDS_ATTENTION, ATOM

_NET_WM_STATE_FOCUSED, ATOM

一个实现可以向这个列表添加新的原子。没有扩展的实现必须忽略任何未知原子,有效地将它们从列表中删除。这些扩展原子不能以前缀\u NET开头。

_NET_WM_STATE_MODAL表示这是一个模态对话框。如果将WM_TRANSIENT_FOR提示设置为另一个顶层窗口,则对话是该窗口的模式:如果WM_TRANSIENT_FOR未设置或设置为根窗口,则对话是其窗口组的模式。

_NET_WM_STATE_STICKY指示窗口管理器应保持窗口的位置固定在屏幕上,即使虚拟桌面滚动。

_NET_WM_STATE_MAXIMIZED_[VERT,HORZ]表示窗口[垂直、水平]最大化。

_NET_WM_STATE_SHADED表示窗口是阴影。

_NET_WM_STATE_SKIP_TASKBAR表示不应将窗口包含在任务栏中。此提示应由应用程序请求,即它表示窗口的性质永远不会在任务栏中。如果_NET_WM_WINDOW_TYPE已经传达了窗口的确切性质,则应用程序不应设置此提示。

_NET_WM_STATE_SKIP_PAGER表示窗口不应包含在寻呼机中。此提示应由应用程序请求,即它表示窗口的性质永远不会在寻呼机中。如果_NET_WM_WINDOW_TYPE已经传达了窗口的确切性质,则应用程序不应设置此提示。

窗口管理器应设置_NET_WM_STATE_HIDDEN,以指示如果窗口的桌面/视口处于活动状态且坐标在屏幕范围内,则屏幕上将看不到窗口。规范的例子是,最小化的窗口应该处于_NET_WM_STATE_HIDDEN状态。寻呼机和类似应用程序应使用_NET_WM_STATE_HIDDEN而不是WM_STATE来决定是否在桌面上以窗口的微型表示形式显示窗口。

实施说明:如果应用程序要求切换_NET_WM_STATE_HIDDEN窗口管理器可能只是忽略请求,因为_NET_WM_STATE_HIDDEN是窗口其他某些方面的函数,例如最小化,而不是独立状态。

_NET_WM_STATE_FULLSCREEN表示窗户应填充整个屏幕,并且没有窗户装饰。此外,窗口管理器负责在从全屏切换回正常窗口后恢复原始几何形状。例如,演示程序将使用此提示。

_NET_WM_STATE_ABOVE指示窗口应在大多数窗口的顶部(有关详细信息,请参阅称为"堆叠顺序"的部分)。

_NET_WM_STATE_BELOW指示窗口应低于大多数窗口(详情请参阅称为"堆叠顺序"的部分)。

_NET_WM_STATE_ABOVE和_NET_WM_STATE_BELOW主要用于用户偏好,不应被应用程序使用,例如,用于提请注意其对话框(在这种情况下,应使用紧急提示,见称为"紧急"的部分)。

_NET_WM_STATE_DEMANDS_ATTENTION表示窗口内或窗口内发生了一些操作。例如,如果窗口请求激活,但窗口管理器拒绝激活,则窗口管理器可能会设置它:如果窗口管理器完成了某些工作,则应用程序可能会设置它。此状态可能由客户端和窗口管理器设置。当窗口管理器确定窗口得到了所需的注意(通常,它被激活)时,它应该被取消设置。

_NET_WM_STATE_FOCUSED表示窗户的装饰是否处于活动状态。客户必须将其视为仅阅读的提示。它不能在映射时设置或通过_NET_WM_STATE客户端消息更改。_NET_ACTIVE_WINDOW给出的窗口通常会有此提示,但有时其他窗口也可能有此提示,如果他们与活动窗口有很强的联系,并且用户会将其视为与之配合的单元。当 toplevel 具有键盘对焦时,修改内部元素外观的客户应检查此状态在_NET_SUPPORTED中的可用性,如果可用,请使用它,而不是通过 FocusIn 事件跟踪焦点。通过这样做,他们将匹配窗口装饰,并准确地反映窗口经理的意图。

要更改映射窗口的状态,客户端必须向根窗口发送_NET_WM_STATE客户端消息:

  window  = the respective client window

  message_type = _NET_WM_STATE

  format = 32

  data.l[0] = the action, as listed below

  data.l[1] = first property to alter

  data.l[2] = second property to alter

  data.l[3] = source indication

  other data.l[] elements = 0

此消息允许同时更改两个属性,特别是允许同时更改水平和垂直最大化。如果只有一个属性要更改,则必须将 l[2] 设置为零。有关源指示的详细信息,请参阅称为"请求中的来源指示"的部分。l[0],行动,必须是:

_NET_WM_STATE_REMOVE0/* remove/unset property */

_NET_WM_STATE_ADD1/* add/set property */

_NET_WM_STATE_TOGGLE2/* toggle property  */

另请参阅有关紧急和固定尺寸窗口的实施说明。

8._NET_WM_ALLOWED_ACTIONS

_NET_WM_ALLOWED_ACTIONS, ATOM[]

表示窗口管理器为此窗口支持的用户操作的原子列表。列表中存在的原子表示允许的操作,不在列表中的原子表示此窗口不支持的操作。窗口管理器必须更新此属性,以反映窗口当前处于“活动”或“敏感”状态的操作。任务栏、寻呼机和其他工具使用_NET_WM_ALLOWED_ACTIONS来决定应该向用户提供哪些操作。

可能的原子是:

_NET_WM_ACTION_MOVE, ATOM

_NET_WM_ACTION_RESIZE, ATOM

_NET_WM_ACTION_MINIMIZE, ATOM

_NET_WM_ACTION_SHADE, ATOM

_NET_WM_ACTION_STICK, ATOM

_NET_WM_ACTION_MAXIMIZE_HORZ, ATOM

_NET_WM_ACTION_MAXIMIZE_VERT, ATOM

_NET_WM_ACTION_FULLSCREEN, ATOM

_NET_WM_ACTION_CHANGE_DESKTOP, ATOM

_NET_WM_ACTION_CLOSE, ATOM

_NET_WM_ACTION_ABOVE, ATOM

_NET_WM_ACTION_BELOW, ATOM

实现可能会在此列表中添加新的原子。没有扩展的实现必须忽略任何未知原子,从而有效地将其从列表中删除。这些扩展原子不能从前缀_NET开始。

请注意,此处列出的操作是窗口管理器将为此窗口执行的操作。仍然必须通过本规范中概述的正常机制请求操作。例如,_NET_WM_ACTION_CLOSE并不意味着客户可以向此窗口发送WM_DELETE_WINDOW消息:这意味着客户可以使用_NET_CLOSE_WINDOW消息要求窗口管理器这样做。

窗口管理器在最初管理窗口时应忽略_NET_WM_ALLOWED_ACTIONS的价值。此值可能由具有不同策略的前窗口管理器遗留下来。

_NET_WM_ACTION_MOVE表示窗口可能会在屏幕上移动。

_NET_WM_ACTION_RESIZE表示窗口可能会重新缩放。(实施说明:窗口管理器可以识别不可调整的窗口,因为它在WM_NORMAL_HINTS中的最低和最大大小将是相同的。

_NET_WM_ACTION_MINIMIZE表示窗口可能被图标化。

_NET_WM_ACTION_SHADE表示窗口可能被遮荫。

_NET_WM_ACTION_STICK表示窗口可能有其粘性状态切换(至于_NET_WM_STATE_STICKY)。请注意,此状态与视图端口,而不是桌面有关。

_NET_WM_ACTION_MAXIMIZE_HORZ表示窗口可以水平最大化。

_NET_WM_ACTION_MAXIMIZE_VERT表示窗口可以垂直最大化。

_NET_WM_ACTION_FULLSCREEN表示窗口可能处于全屏状态。

_NET_WM_ACTION_CHANGE_DESKTOP表示窗口可以在桌面之间移动。

_NET_WM_ACTION_CLOSE表示窗口可能已关闭(即可以发送_NET_CLOSE_WINDOW消息)。

_NET_WM_ACTION_ABOVE表示窗口可能放置在"上面"的窗口层中(即将响应_NET_WM_STATE_ABOVE更改;详情请参阅称为"堆叠顺序"的部分)。

_NET_WM_ACTION_BELOW表示窗口可能放置在"下面"的窗口层中(即将响应_NET_WM_STATE_BELOW更改;详情请参阅称为"堆叠顺序"的部分)。

9._NET_WM_STRUT

_NET_WM_STRUT, left, right, top, bottom, CARDINAL[4]/32

此属性相当于一个_NET_WM_STRUT_PARTIAL属性,其中所有开始值为 0,所有最终值均为逻辑屏幕的高度或宽度。但是,_NET_WM_STRUT_PARTIAL的推出时间比_NET_WM_STRUT晚,因此客户除了_NET_WM_STRUT_PARTIAL外,还可设置此属性,以确保与支持旧版规范的 Window 管理器的向后兼容性。

10._NET_WM_STRUT_PARTIAL

_NET_WM_STRUT_PARTIAL, left, right, top, bottom, left_start_y, left_end_y,

right_start_y, right_end_y, top_start_x, top_end_x, bottom_start_x,

bottom_end_x,CARDINAL[12]/32

如果窗口要在屏幕边缘保留空间,则客户端必须设置此属性。该属性包含4个基数,指定屏幕每个边框处保留区域的宽度,另外8个基数指定与四个struts中的每个struts对应的开始和结束。值的顺序是左、右、上、下、左开始、左结束、右开始、右结束、上开始、上结束、下开始、下结束。所有坐标都是根窗口坐标。客户机可以随时更改此属性,因此如果窗口管理器使用此属性为窗口分配特殊语义,则窗口管理器必须监视属性通知事件。

如果设置此属性和_NET_WM_STRUT属性,窗口管理器必须忽略_NET_WM_STRUT属性值,而是使用_NET_WM_STRUT_PARTIAL值。这将确保客户能够安全地设置两个属性,而无需放弃新属性的改进语义。

struts的目的是在桌面的边界保留空间。例如,这对于停靠区域、任务栏或面板非常有用。窗口管理器在约束窗口位置时应该考虑这个保留区域——例如,最大化的窗口不应该覆盖该区域。

与每个支柱相关的开始和结束值允许保留不跨越屏幕整个宽度或高度的区域。支柱必须在根窗坐标中指定,即它们不与任何视图端口或 Xinerama 监视器的边缘相对。

例如,对于显示在屏幕底部、高50像素、占用屏幕边缘左侧200-600像素空间的面板样式客户端,将底部支柱设置为50,将底部开始设置为200,将底部结束设置为600。另一个例子是屏幕上使用Xinerama扩展的面板。假设设置使用两个监视器,一个以1280x1024运行,另一个以1024x768运行,两个物理显示器的上边缘对齐。如果面板想要用50像素高的面板填充较小显示屏的整个底部边缘,则应将底部支柱设置为306,底部\u开始\u x设置为1280,底部\u结束\u x设置为2303。请注意,支柱相对于屏幕边缘,而不是xinerama显示器的边缘。

理由:一个简单的"不覆盖"提示不足以处理,例如自动隐藏面板。

注意:自动隐藏面板应将支柱设置为其最小隐藏尺寸。不延伸至屏幕边框全长的“转角”面板应仅设置一个支柱。

11._NET_WM_ICON_GEOMETRY

_NET_WM_ICON_GEOMETRY, x, y, width, height, CARDINAL[4]/32

此可选属性可能由独立工具(如任务栏或图标框)设置。它指定了可能图标的几何形状,以防窗口被图标化。

理由:这使得窗口管理器能够显示一个不错的动画,如将窗口更改为其图标。

12._NET_WM_ICON

_NET_WM_ICON CARDINAL[][2+n]/32

这是客户端可能的图标阵列。此规范没有规定这些图标的大小,但单个桌面环境或工具包可以这样做。窗口管理器可能会将这些图标中的任何一个缩放到适当的大小。

这是一个32位压缩基数ARGB的数组,高字节是A,低字节是B。前两个基数是width,height。数据按行排列,从左到右,从上到下。

13._NET_WM_PID

_NET_WM_PID CARDINAL/32

如果设置,此属性必须包含拥有此窗口的客户端的进程 ID。窗口管理器可能会使用此来杀死对_NET_WM_PING协议没有响应的窗口。

如果设置了_NET_WM_PID,则还必须设置 ICCCM 指定的属性WM_CLIENT_MACHINE。虽然 ICCCM 仅要求将WM_CLIENT_MACHINE设置为"从运行服务器的机器中显示运行客户端的机器名称的字符串",但符合此规范要求将WM_CLIENT_MACHINE设置为客户端主机的完全合格域名。

另见关于杀挂过程的实施说明。

14._NET_WM_HANDLED_ICONS

_NET_WM_HANDLED_ICONS

此属性可由寻呼机在其自己的顶级窗口之一上设置,以指示窗口管理器不需要为图标化窗口提供图标,例如,如果它是任务栏并为图标化窗口提供按钮。

15._NET_WM_USER_TIME

_NET_WM_USER_TIME CARDINAL/32

此属性包含在此窗口中最后一个用户活动发生的 XServer 时间。

客户应在映射窗口之前,将此属性设置在每一个新的顶层窗口(或由_NET_WM_USER_TIME_WINDOW属性指出的窗口上),以显示导致窗口出现的用户交互的时间戳。例如,只处理核心事件的客户端可能会使用上次 KeyPress 或 ButtonPress 事件的时间戳。ButtonRelease 和 KeyRelease 事件通常不应被视为用户交互,因为应用程序可能会从全局keybindings绑定接收 KeyRelease 事件,并且通常发布事件的时间戳可能晚于匹配点击事件触发的操作。如果应用在启动通知下启动,客户端可以从DESKTOP_STARTUP_ID环境变量中获取导致其第一个窗口出现的时间戳。如果客户端不知道导致第一个窗口出现的用户交互的时间戳(例如,因为它不是通过启动通知启动的),则它不应为该窗口设置属性。新映射的窗口上为零的特殊值可用于请求在映射窗口时最初不集中。

如果客户端有活动窗口,则每当有用户活动时,它也应该在窗口上更新此属性。

理由:此属性允许 Windows 管理器在映射窗口时更改窗口的对焦、堆叠和/或放置行为,具体取决于新窗口是否由用户操作创建,还是由定时器或其他事件激活的"弹出窗口"。

16._NET_WM_USER_TIME_WINDOW

_NET_WM_USER_TIME_WINDOW WINDOW/32

此属性包含客户设置_NET_WM_USER_TIME属性的窗口的 XID。客户应检查窗口管理器是否支持_NET_WM_USER_TIME_WINDOW,如果不允许,则会重新设置顶层窗口上的_NET_WM_USER_TIME属性。

理由:将频繁变化的_NET_WM_USER_TIME属性存储在顶层窗口本身,本身会导致每个对该窗口的任何属性感兴趣的应用程序在每次按键时都会被唤醒,这对使用电池供电的笔记本电脑尤其不利。

17._NET_FRAME_EXTENTS

_NET_FRAME_EXTENTS, left, right, top, bottom, CARDINAL[4]/32

窗口管理器必须将_NET_FRAME_EXTENTS设置为窗口框架的程度。左、右、上和下是窗口管理器添加的相应边框的宽度。

18._NET_WM_OPAQUE_REGION

_NET_WM_OPAQUE_REGION, x, y, width, height, CARDINAL[][4]/32

客户机可以将此属性设置为4元组列表[x,y,width,height],每个元组表示窗口坐标中的矩形,其中窗口内容的像素具有完全不透明的alpha值。如果窗口是由合成器绘制的,而没有添加任何透明度,那么这样的矩形将遮挡它后面绘制的任何内容。当窗口具有RGB视觉而不是ARGB视觉时,此属性通常不有用,因为窗口的有效不透明区域正是通过形状扩展设置的窗口边界区域。对于具有ARGB视觉和通过形状扩展设置的边界区域的窗口,有效不透明区域由该属性设置的区域和通过形状扩展设置的边界区域的交集给出。合成管理器可能会忽略此提示。

理由:这给了合成管理器更多的优化空间。例如,它可以避免在窗口后面绘制被遮挡的部分。

19._NET_WM_BYPASS_COMPOSITOR

_NET_WM_BYPASS_COMPOSITOR, CARDINAL/32

客户端可以设置此属性,以提示合成器窗口将受益于运行未压缩(即未重定向到屏幕外)或窗口可能因未压缩而受损。值为0表示没有首选项。值1提示合成器禁用此窗口的合成。值为2将提示合成器不禁用此窗口的合成。所有其他值都是保留的,应与0的值相同。如果请求绕过,则合成管理器可以绕过全屏和非全屏窗口的合成,但如果会导致与合成外观的差异,则不能绕过。

理由:一些像全屏游戏这样的应用程序可能希望在运行时不需要重定向到屏幕外(以避免多余的拷贝),从而表现更好。创建弹出窗口的应用程序可能总是希望运行composited以避免暴露。

窗口管理器协议

_NET_WM_PING

此协议允许窗口管理器确定客户端是否仍在处理 X 事件。窗口管理器可以使用此方法确定发送后未能关闭的窗口是否 WM_DELETE_WINDOW已停止响应或因其他原因(如等待用户确认)而停止响应或停止。客户应表明它愿意通过在客户窗口的WM_PROTOCOLS属性中列出_NET_WM_PING来参与此协议。

窗口管理器可以通过发送以下客户端消息随时使用此协议:

type = ClientMessage

window = the respective client window

message_type = WM_PROTOCOLS

format = 32

data.l[0] = _NET_WM_PING

data.l[1] = timestamp

data.l[2] = the respective client window

other data.l[] elements = 0

接收此消息的参与客户端必须立即将其发送回根窗口,方法是设置window=root,并使用与此规范中使用的所有其他根窗口消息相同的事件掩码调用XSendEvent。客户机不得更改事件中除窗口以外的任何字段。这包括data.l[5]数组中的所有5个long。如果需要,窗口管理器可以通过时间戳和data.l[2]字段唯一地标识ping。请注意,一些较旧的客户端可能不会保留data.l[2]到data.l[4]。

如果客户端未能在合理时间内响应此协议,窗口管理器可能会杀死客户端(使用_NET_WM_PID)。

另见关于杀挂过程的实施说明。

_NET_WM_SYNC_REQUEST

此协议使用 XSync 扩展(参见协议规范库文档),使客户端和窗口管理器同步重新粉刷窗口管理器框架和客户端窗口。客户表示,它愿意参与协议,将_NET_WM_SYNC_REQUEST列在客户窗口的WM_PROTOCOLS属性中,并将 XSync 计数器的 XID 存储在物业_NET_WM_SYNC_REQUEST_COUNTER中。此计数器的初始值不由此规范定义。

窗口管理器在客户信息发送给客户端的配置通知事件之前使用此协议,具体如下:

type = ClientMessage

window = the respective client window

message_type = WM_PROTOCOLS

format = 32

data.l[0] = _NET_WM_SYNC_REQUEST

data.l[1] = timestamp

data.l[2] = low 32 bits of the update request number

data.l[3] = high 32 bits of the update request number

other data.l[] elements = 0

在收到一个或多个此类消息/配置通知对后,并在处理了与配置通知事件相关的所有重新粉刷后,客户端必须将_NET_WM_SYNC_REQUEST_COUNTER设置为收到的最后一个客户端消息的数据.l[2] 和数据.l[3] 字段所指示的 64 位数字。

通过使用 XSync 扩展的警报或等待机制,窗口管理器可以知道客户端何时已完成"配置通知"事件的处理。窗口管理器不应以客户端能够跟上的速度更快地重新大小窗口。

客户信息中的更新请求编号由窗口管理器确定,但受限制不得为 0。该数字通常用于每发送一条邮件增加一条。由于 XSync 计数器的初始值未由此规范定义,窗口管理器可能随时设置 XSync 计数器的价值,并且必须在首次管理新窗口时设置该值。

_NET_WM_FULLSCREEN_MONITORS

_NET_WM_FULLSCREEN_MONITORS, CARDINAL[4]/32

4个监视器索引的只读列表,指示启用全屏状态时窗口的上、下、左、右边缘。索引来自Xinerama扩展返回的集合。

具有_NET_WM_FULLSCREEN_MONITORS设置的窗口的瞬时窗口(如具有类型_NEW_WM_WINDOW_TYPE_DIALOG的窗口)通常预计仅针对其中一台监视器进行定位(例如以中心为中心)。这可能是包含鼠标指头的监视器或包含非全屏窗口的监视器。

希望更改此列表的客户必须向根窗口发送_NET_WM_FULLSCREEN_MONITORS客户端消息。窗口管理器必须更新此列表以反映窗口的当前状态。

  window  = the respective client window

  message_type = _NET_WM_FULLSCREEN_MONITORS

  format = 32

  data.l[0] = the monitor whose top edge defines the top edge of the fullscreen window

  data.l[1] = the monitor whose bottom edge defines the bottom edge of the fullscreen window

  data.l[2] = the monitor whose left edge defines the left edge of the fullscreen window

  data.l[3] = the monitor whose right edge defines the right edge of the fullscreen window

  data.l[4] = source indication

有关源指示的详细信息,请参阅称为"请求中的来源指示"的部分

虚拟机器软件可能会使用此提示来具有一个虚拟操作系统实例,该实例可看到多个监视器。应用窗口延伸到多个监视器上,使这些监视器看起来已被访客虚拟机接管。

此提示也可能被电影或演示应用程序使用,允许用户显示跨过多个监视器的介质。

在这两种情况下,应用程序将有一些用户界面允许用户配置监控应用程序全屏。窗口管理器不需要提供这样的界面,尽管可以。

如果监视器配置发生变化,应用程序负责重新计算它想要显示的监视器。窗口管理器可以继续使用与以前相同的监视器指数,或者干脆清除列表,返回到"正常"全屏。

其他属性

_NET_WM_FULL_PLACEMENT

通过在支持的窗口中包含此提示,窗口管理器宣布它对其支持的所有窗口类型执行合理的窗口放置(例如,在主窗口上居中对话框或窗口管理器认为合理的任何处理)。这反过来意味着,当客户机检测到支持此提示时,不应滥用甚至经常使用PPosition和USPosition提示来请求放置。特别地::

USPose 保留仅用于指示该位置由用户指定,不得用于任何其他内容(详情请参阅 ICCM 第 4.1.2.3 节)

只有在使用特定位置时,PPos 应用于指定位置。不应指定"默认"位置,例如主窗口上的对话窗口。

理由:窗口管理器通常可以执行更好的放置(甚至可能是可配置的)窗口比应用程序。但是,在编写本文时,Window 管理器无法决定何时使用它们,因为许多应用程序滥用了定位标志和/或提供不必要的默认位置。

注意:该属性除了在_NET_SUPPORTED中列出外,其他任何地方均不使用。

组合管理器

合成管理器是一个X客户机,它使用合成扩展将所有窗口重定向到屏幕外的pixmap,并使用损坏扩展跟踪在这些屏幕外的pixmap上进行绘制的时间。合成管理器负责在屏幕上绘制像素贴图,可能会添加半透明或变形等效果。

本节指定合成管理器和应用程序之间的交互。

_NET_WM_CM_Sn Manager Selection

对于他们管理的每个屏幕,合成管理器必须获得一个名为 _NET_WM_CM_S的选择的所有权,其中是屏幕编号。编制经理必须遵守[ICCCM]第 2.8 节中描述的"经理选择"公约。

nn

WM_TRANSIENT_FOR for override-redirect windows

WM_TRANSIENT_FOR属性由[ICCCM]定义。用于托管窗口。此规范将属性的使用扩展到覆盖重定向窗口。如果覆盖重定向是代表另一个窗口的弹出窗口,则客户端应在覆盖重定向到另一个窗口上设置WM_TRANSIENT_FOR。

例如,客户端应将下拉菜单上的WM_TRANSIENT_FOR设置为包含菜单栏的顶层应用程序窗口。

实施说明

桌面/工作区模型

此规格假设桌面模型由一个或多个完全独立的桌面组成,该台式机可能大于屏幕区域,也可能不大于屏幕区域。当桌面大于屏幕时,如果将实施滚动或寻呼,则由窗口管理器决定。

文件管理器桌面

此规格建议通过映射桌面大小的窗口(无形状)到所有桌面,并_NET_WM_WINDOW_TYPE_DESKTOP来实现文件管理器桌面。这使得桌面变得可聚焦,并大大简化了文件管理器的实现。它也比管理大量的小形状的窗户更快。文件管理器在此窗口上绘制背景。应该有一个带有窗口手柄的根属性,用于想要绘制背景(xearth)的应用程序。

对应用瞬时窗口实施增强支持

如果WM_TRANSIENT_FOR属性设置为"无"或"根"窗口,则窗口应被视为同一组中所有其他窗口的瞬态窗口。人们注意到,这是轻微的 ICCCM 违规行为,但由于这种行为对于许多工具包和窗口管理器来说相当标准,而且极不可能破坏任何东西,因此将其记录为标准似乎是合理的。

紧迫性

预期立即采取用户行动的 Windows 应使用 ICCCM 中定义的WM_HINTS.标志属性中的紧急位来表示这一点。

固定尺寸的窗户

Windows 可以通过在 ICCCM WM_NORMAL_HINTS属性中设置最小光=最大光度和最小宽度来表示它们不可缩放。窗口管理器可能会以不同的方式装饰此类窗口。

寻呼机和任务栏

此规范旨在为窗口管理器独立寻呼机和任务栏做出合理规定。窗口管理器需要/希望使用本规范中规定的机制实现超出可实现的功能之外的其他功能,可以选择实现自己的寻呼机,该寻呼机使用进一步、窗口管理器特定提示或其他一些方法与窗口管理器进行通信。

寻呼机应决定是否使用以下准则显示窗口的微型版本:

如果_NET_WM_STATE_SKIP_PAGER或_NET_WM_STATE_HIDDEN设置在窗口上,则寻呼机不应显示该窗口。

寻呼机可以选择不显示具有某些语义类型的窗口:此规范没有建议,但常见做法是避免显示_NET_WM_WINDOW_TYPE_DOCK例如。

如果_NET_WM_STATE_SKIP_PAGER和_NET_WM_STATE_HIDDEN提示不存在,并且窗口管理器声称支持_NET_WM_STATE_HIDDEN,则窗口应显示是否位于正常状态或标志性状态。

对于不支持_NET_WM_STATE_HIDDEN的窗口管理器,寻呼机不应显示徽因国家/地区的窗口。这些窗口管理器可能正在使用此规范的旧版本。

窗口位置

窗口管理器实施者应参阅 ICCCM,了解如何处理 Map 请求和配置查询事件的明确规范。但是,由于 ICCCM 的这些方面很容易被误读,本文档提供了以下说明:

窗口管理器必须为 MapRequest和配置查询事件(ICCCM Version 2.0, §4.1.2.3 and §4.1.5)遵守win_gravity的WM_NORMAL_HINTS领域

生成合成配置通知事件时,给出的位置必须是客户端窗口的左上角,与根窗口的来源相关(即忽略win_gravity) (ICCCM Version 2.0, §4.2.3)

窗口管理器维护每个客户端窗口的参考点,并根据窗口的win_gravity将窗口相对于此参考点放置如下:

win_gravity:

放置在参考点

静态重力

客户端窗口的左上角

西北重力

框架窗口的左上角

北重力

框架窗口顶部的中心

东北重力

框架窗口的右上角

东重力

框架窗口右侧的中心

东南重力

框架窗口的右下角

南重力

框架窗口底部的中心

西南重力

框架窗口的左下角

西重力

框架窗口左侧的中心

中心重力

框架窗口的中心

应用程序可以随时更改其win_gravity设置。

如果应用更改了其win_gravity则窗口管理器应调整参考点,以便客户端窗口不会因此而移动。例如,如果应用程序的win_gravity是西北重力,参考点位于帧窗口的左上角,则在将win_gravity更改为东南重力后,应调整参考点以指向框架的右下角。

注意

由于比赛条件的原因,更改单个配置请求的win_gravity并随后返回不太可能按预期工作。窗口管理器看到WM_NORMAL_HINTS的属性通知,然后是配置请求,然后是另一个属性通知WM_NORMAL_HINTS。当窗口管理器在响应第一个属性通知时请求更改的WM_NORMAL_HINTS时,服务器可能已经处理了第二个属性更改。

如果窗口管理器支持它,应用程序应使用具有指定重力的_NET_MOVERESIZE_WINDOW以避免此问题。

如果应用程序要求新位置 (x, y) (可能还有新大小),窗口管理器会根据以下表中解释的客户端窗口(可能为新)大小(宽度、高度)、边框宽度 (bw) 和win_gravity计算新参考点(ref_x,ref_y)。

窗口管理器将使用新的参考点,直到下一个请求获得新职位。

win_gravity:

ref_x:

ref_y:

静态重力

x

y

西北重力

x-布瓦

y - bw

北重力

x+(宽度/2)

y - bw

东北重力

x 宽度=宽度

y - bw

东重力

x 宽度=宽度

y+(高度/2)

东南重力

x 宽度=宽度

y= 高度 =bw

南重力

x+(宽度/2)

y= 高度 =bw

西南重力

x-布瓦

y= 高度 =bw

西重力

x-布瓦

y+(高度/2)

中心重力

x+(宽度/2)

y+(高度/2)

如果应用程序请求只是一个新的大小,其参考点不会移动。因此,例如,如果客户端窗口已win_gravity东南重力并进行了调整,则其框架的右下角不会移动,而是左上角将根据大小差异进行调整。

在计算初始放置时的参考点时,窗口管理器应考虑初始窗口的大小,就好像它是此窗口的框架一样。

窗口内 MDI

此规范的作者承认,没有标准方法允许窗口管理器管理窗口中 MDI 应用程序的一部分。建议申请作者使用其他形式的 MDI,或建议在未来修订本规范时加入一种机制。

杀洪过程

如果流程未能响应_NET_WM_PING协议,_NET_WM_PID可与指定WM_CLIENT_MACHINE ICCCM 组合使用,以尝试扼杀流程。

WM_CLIENT_MACHINE通常通过调用 XSetWM 建议()设置。当前主机的主机名可以使用 get 主机名 (),当平台实现器上没有 get 主机名 () 时,可以使用非同名返回的结构 utsname 的点头字段值()。另请注意,WM_CLIENT_MACHINE的价值不能保证是主机的完全合格的域名。如何检索主机名的示例:

int net_get_hostname (char *buf, size_t maxlen)

{

#ifdef HAVE_GETHOSTNAME

if (buf == NULL) return 0;

gethostname (buf, maxlen);

buf [maxlen - 1] = '\0';

return strlen(buf);

#else

struct utsname name;

size_t len;

if (buf == NULL) return 0;

uname (&name);

len = strlen (name.nodename);

if (len >= maxlen) len = maxlen - 1;

strncpy (buf, name.nodename, len);

buf[len] = '\0';

return len;

#endif

}

堆叠顺序

为了在不同的桌面环境之间获得良好的互操作性,建议从底部以下分层堆叠顺序:

类型_NET_WM_TYPE_DESKTOP的窗口

窗口具有状态_NET_WM_STATE_BELOW

窗口不属于任何其他层

类型_NET_WM_TYPE_DOCK的窗口(除非它们具有状态_NET_WM_TYPE_BELOW)和具有状态_NET_WM_STATE_ABOVE的窗口

有状态_NET_WM_STATE_FULLSCREEN的集中窗口

对于另一个窗口瞬息万变的窗口应保留在此窗口上方。

窗口管理器可以选择将某些窗口放在不同的堆叠位置,例如允许用户将当前活动窗口带到顶部,并在窗口失去焦点时将其返回。

请求中的源指示

客户端的某些请求包括客户端的类型,例如_NET_ACTIVE_WINDOW消息。目前,正常应用程序的类型可以是 1,用于代表直接用户操作的寻呼机和其他客户端(窗口管理器可能会决定以不同于直接用户操作结果的请求的方式处理来自应用程序的请求)。仅支持此规格较旧版本的客户端将具有 0 作为其源指示,因此根本不指定其源。这也可能意味着邮件中的某些字段仅符合旧规范版本。

更改历史记录

自 1.4 起草以来的变化

添加了_NET_WM_BYPASS_COMPOSITOR

添加了_NET_WM_STATE_FOCUSED。

添加_NET_WM_OPAQUE_REGION

自 1.3 以来的变化

添加了_NET_WM_MOVERESIZE_CANCEL。

要用于覆盖重定向窗口的新窗口类型:_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_CM_Sn经理选择作曲经理。

已添加用于覆盖重定向窗口的注释WM_TRANSIENT_FOR

添加了_NET_WM_USER_TIME_WINDOW。

添加了_NET_WM_FULL_PLACEMENT。

添加了_NET_WM_FULLSCREEN_MONITORS。

自 1.2 以来的变化

向_NET_CLOSE_WINDOW、_NET_WM_MOVERESIZE、_NET_MOVERESIZE_WINDOW、_NET_WM_DESKTOP和_NET_WM_STATE消息添加了源指示。

添加_NET_WM_SYNC_REQUEST,以便在不透明的重新大小期间同步重新粉刷应用程序窗口和窗口管理器框架。

添加了_NET_REQUEST_FRAME_EXTENTS和_NET_FRAME_EXTENTS,允许客户端检索其窗口的帧范围。

增加了新的状态_NET_WM_STATE_DEMANDS_ATTENTION。

将时间戳、源指示和请求者的活动窗口字段添加到_NET_ACTIVE_WINDOW消息中。

添加了_NET_RESTACK_WINDOW消息。

增加了新的属性_NET_WM_STRUT_PARTIAL,允许部分宽度支柱。

重写"窗口运动"的实施说明,将其重新标题为"窗口几何"。

重写关于"紧急"的实施说明,明确提示不仅仅是对话。

固定了_NET_DESKTOP_LAYOUT的 X 和 Y 成员的规格,并将其重命名为列和行,以便清晰明了。

将_NET_WM_STATE_MODAL的描述更改为不再要求应用为群态窗口打破 ICCCM,但仍支持WM_TRANSIENT_FOR+root 方言。

指定客户端邮件中未使用的字段必须设置为 0。

_NET_WM_PING消息现在已在数据.l[2] 字段中识别客户端窗口。

添加_NET_WM_USER_TIME以检测窗口中的用户活动。

明确指定窗口管理器应在重置_NET_WM_STATE_FULLSCREEN时恢复原始几何形状。

自 1.1 以来的变化

将WM_CLIENT_NAME(字符串)从建议更改为_NET_WM_PID所需的。

WM_CLIENT_NAME(字符串)内容的规范和示例代码。

添加_NET_WM_WINDOW_TYPE_SPLASH,_NET_WM_WINDOW_TYPE_UTILITY。

添加了_NET_WM_STATE_FULLSCREEN。

添加了_NET_WM_ALLOWED_ACTIONS。

增加了_NET_WM_STATE_SKIP_PAGER和_NET_WM_STATE_SKIP_TASKBAR的_NET_WM_STATE_HIDDEN和明确的目的。更改了虚拟桌面实现部分,建议 ICCCM 遵守有关徽标状态,使用_NET_WM_STATE_HIDDEN以避免混淆。为寻呼机添加了何时显示窗口的实现说明。

为_NET_WM_MOVERESIZE消息添加了键盘启动操作的按钮字段和新方向。

增加了关于删除_NET_WM_STATE的建议,并在取出窗口时_NET_WM_DESKTOP。

添加_NET_DESKTOP_LAYOUT,允许寻呼机指定桌面间几何形状。

添加了_NET_SHOWING_DESKTOP。

添加了_NET_WM_STATE_ABOVE和_NET_WM_STATE_BELOW和推荐的分层堆叠顺序。

添加了_NET_MOVERESIZE_WINDOW。

提高引文的加价。

更详细地解释_NET_DESKTOP_GEOMETRY及_NET_WM_HANDLED_ICONS,并改善"杀鸿过程"一节对WM_CLIENT_MACHINE的解释。

将卢博斯·卢纳克添加到贡献者列表中。

自1.0以来的变化

修复教条类型,添加作者信息,更新数据。

更改规范描述措辞更具包容性,并反映规范的联合性质。

修复杂项排版、语法和拼写错误。

澄清_NET_SUPPORTED包括所有原子,而不仅仅是属性名称。

使用必须和应该的各种更正。

在 "字节" 应该是 "卡迪纳尔" 的_NET_WM_ICON修复问题

用实体替换 ISO-8559-1 字符。

自1.0pre5以来的变化

更改历史走向结束。

更新了 UTF-8 参考。

窗口重力信息已更新。

已添加版权。

小打字错误校正。

自1.0pre4以来的变化

澄清了对大型桌面上客户端提供的几何形状的解释。

为_NET_DESKTOP_NAMES添加了更多解释。

添加了_NET_WM_ICON_NAME和_NET_WM_VISIBLE_ICON_NAME。

试图改进_NET_WM_STRUT解释的措辞。

将_NET_WORKAREA更改为一系列视图端口相关几何形状。

更新了_NET_NUMBER_OF_DESKTOPS的"依赖"属性列表,包括_NET_WORKAREA和_NET_DESKTOP_VIEWPORT。

对所有客户端消息进行整理格式化。

自1.0pre3以来的变化

添加有关常见非 ICCM 功能的信息。

添加了向根窗口发送消息的解释。

从类型名称中删除XA_前缀。

澄清"映射顺序"是指初始映射并指定两个订单的方向。

澄清桌面具有_NET_DESKTOP_GEOMETRY指定的共同大小。

重写对_NET_DESKTOP_VIEWPORT的解释。

_NET_CURRENT_DESKTOP的整洁格式。

将"窗口手柄"替换为"窗口 ID"。

_NET_WORKAREA的整洁格式。

改写_NET_VIRTUAL_ROOTS的动机。

增加了关于指点抓取的建议, 以_NET_WM_MOVERESIZE。

_NET_WM_STATE中的固定拼写错误。

添加了_NET_WM_STATE_SKIP_PAGER。

_NET_WM_STRUT的整洁格式。

_NET_WM_ICON_GEOMETRY的整洁格式。

自1.0pre2以来的变化

_NET_SET_NUMBER_OF_DESKTOPS - - _NET_NUMBER_OF_DESKTOPS的一致性。

_NET_WM_VISIBLE_NAME_STRING - - _NET_WM_VISIBLE_NAME的一致性。

_NET_WM_STATE:对允许的扩展添加解释。已设置/未设置的附加解释。

拼写检查,纠正各种拼写错误。

UTF8 -+UTF-8的一致性。

添加了对 ICCM UTF-8 的引用(不完整)。

添加缺少的数据和事件格式。

澄清_NET_SUPPORTING_WM_CHECK。

固定格式的_NET_CLOSE_WINDOW消息。

自1.0pre1以来的变化

删除有关 Gnome(潜在)文件管理器行为的实现说明。

执行说明的窗口运动部分已修订。

自1.9f以来的变化

首次接受版本 1.9XX 的修订编号 - = 1.0preXX。

添加了采用此规范的先决条件。

为保持一致性而对_NET_CURRENT_DESKTOP格式进行整理。

_NET_ACTIVE_WINDOW的整洁格式,以保持一致性。删除了双倍文本。

_NET_WM_DESKTOP的整洁格式,以保持一致性。

添加了杀洪过程实施说明。_NET_WM_PID和_NET_WM_PING现在链接到这一点。

阐明_NET_WM_MOVERESIZE的x_root和y_root含义。

已添加贡献者列表。

自1.9e以来的变化

添加了_NET_WM_VISIBLE_NAME_STRING

从_NET_NUMBER_OF_DESKTOPS和_NET_DESKTOP_NAMES中消除歧义。

将_NET_WM_MOVERESIZE格式设置为 32 以保持一致性。

删除_NET_PROPERTIES。

从_NET_WM_MOVERESIZE中删除评论。

自1.9d以来的变化

添加_NET_VIRTUAL_ROOTS

添加有关符合 ICCM 的窗口移动的说明。

添加_NET_WM_HANDLED_ICONS

添加_NET_SUPPORTING_WM_CHECK

已移除激活度

自1.9c以来的变化

将提示的包装删除为2 X属性。Jim Gettys 指出,使用 Xlib 例程可以更好地实现往返次数减少的性能收益。

澄清_NET_DESKTOP_VIEWPORT是像素

_NET_DESKTOP_VIEWPORT现在是一个数组,每个桌面一个,允许在不同的桌面上进行不同的活动视图端口

_NET_WM_STRUT现在只适用于客户端可见的桌面

引入 RFC 2119 语言,并试图澄清窗口管理器、寻呼机和应用程序的角色

添加_NET_WM_NAME

_NET_DESKTOP_NAMES现在在 Utf8

桌面现在从0开始

添加了_NET_WM_PID

已添加_NET_WM_PING协议

添加了_NET_WM_STATE_SKIP_TASKBAR

自1.9b以来的变化

删除_NET_NUMBER_OF_DESKTOPS客户端消息,因为它与 _NET_[插入/删除]_DESKTOP不必要地重叠。

用_NET_WM_WINDOW_TYPE功能提示替换_NET_WM_LAYER和_NET_WM_HINTS。

为了扩展性,将_NET_WM_STATE更改为原子列表。

扩大对_NET_WORKAREA和_NET_WM_STRUT的描述。

删除_NET_WM_SIZEMOVE_NOTIFY协议。

为_NET_ACTIVE_WINDOW客户端消息添加激活度

添加_NET_WM_ICON

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43287763/article/details/121461519

智能推荐

class和struct的区别-程序员宅基地

文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。

android使用json后闪退,应用闪退问题:从json信息的解析开始就会闪退-程序员宅基地

文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退

如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet-程序员宅基地

文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet

系统项目报表导出功能开发_积木报表 多线程-程序员宅基地

文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程

ajax 如何从服务器上获取数据?_ajax 获取http数据-程序员宅基地

文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据

Linux图形终端与字符终端-程序员宅基地

文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端

随便推点

Python与Arduino绘制超声波雷达扫描_超声波扫描建模 python库-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库

凯撒加密方法介绍及实例说明-程序员宅基地

文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密

工控协议--cip--协议解析基本记录_cip协议embedded_service_error-程序员宅基地

文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类_vs添加mfc库-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库

frame_size (1536) was not respected for a non-last frame_frame_size (1024) was not respected for a non-last-程序员宅基地

文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame

Android移动应用开发入门_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量-程序员宅基地

文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量

推荐文章

热门文章

相关标签