WM_CLASS 与 WM_INSTANCE?

WM_CLASS 与 WM_INSTANCE?

当我运行时,xprop我得到一个具有两个值的类字符串,其中一个 i3 调用 an instance,另一个 a class,例如在chromium-browser实用xprop程序上将返回类似这样的内容,

WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"

关于窗口和这两个字段的官方指导是什么?在这一点上,它们非常相似。他们有什么不同吗?如果是这样,我应该选择什么,为什么? GUI 作者应该如何分类和实例化他们的名字?

答案1

实际行为定义为该规范的标题为客户端间通信约定手册(ICCM)。基本上,类名是由制作应用程序的人指定的。实例名可以由用户指定,其指定的资源应该覆盖类名指定的资源。

这是 X11r6 的 ICCMv2 在 上所说的WM_CLASS

4.1.2.5.WM_CLASS财产

WM_CLASS属性(不带控制字符的 STRING 类型)包含两个连续的以 null 结尾的字符串。它们指定客户端和窗口管理器用于查找应用程序资源或作为标识信息的实例和类名称。当窗口离开“撤回”状态时,此属性必须存在,并且仅当窗口处于“撤回”状态时才可以更改。窗口管理器可以仅在启动时和窗口离开撤回状态时检查该属性,但客户端不需要动态更改其状态。

这两个字符串分别是:

  • 一个字符串,用于命名拥有此窗口的客户端所属的应用程序的特定实例。由实例名称指定的资源覆盖由类名指定的任何资源。实例名称可由用户指定以操作系统特定的方式。在符合 POSIX 的系统上,使用以下约定:

    • 如果-name NAME在命令行上给出,NAME则用作实例名称。
    • 否则,如果设置了环境变量RESOURCE_NAME,则其值将用作实例名称。
    • 否则,用于调用程序的名称的尾部部分(argv[0]去除任何目录名称)将用作实例名称。
  • 一个字符串,指定拥有此窗口的客户端所属的应用程序的一般类别。按类指定的资源适用于具有相同类名的所有应用程序。类名由应用程序编写者指定。常用的类名示例包括:“Emacs”、“XTerm”、“XClock”、“XLoad”等。

请注意,字符串以 null 结尾,因此与属性以 null 分隔WM_CLASS的一般约定不同。STRING这种不一致对于向后兼容性是必要的。

(粗体字是我添加的)

相关内容