Eva*_*oll 5 window-manager standard x11 window x
当我跑xprop我得到了两个值,其中之一I3调用一个类的字符串instance,另外一个class,例如在chromium-browser该xprop实用程序将返回这样的事情,
WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"
Run Code Online (Sandbox Code Playgroud)
窗口和这两个字段的官方指南是什么?为此,它们非常相似。他们有什么不同吗?如果是这样,我应该选择什么,为什么?GUI作者应该如何分类和实例化他们的名字?
实际行为由名为Inter-Client Communication Conventions Manual (ICCM)的规范定义。基本上类名是由制作应用程序的人指定的。实例名可由用户指定,其指定的资源应覆盖类名指定的资源。
这是 X11r6 的 ICCMv2 所说的WM_CLASS,
4.1.2.5.
WM_CLASS财产的
WM_CLASS(不控制字符类型STRING的)属性包含两个连续的空终止字符串。这些指定了客户端和窗口管理器使用的实例和类名称,用于查找应用程序的资源或作为标识信息。此属性必须在窗口离开 Withdrawn 状态时出现,并且只能在窗口处于 Withdrawn 状态时更改。窗口管理器可能只在它们启动时和窗口离开 Withdrawn 状态时检查属性,但客户端不需要动态更改其状态。这两个字符串分别是:
一个字符串,用于命名拥有此窗口的客户端所属的应用程序的特定实例。由实例名称指定的资源会覆盖由类名称指定的任何资源。用户可以以特定于操作系统的方式指定实例名称。在符合 POSIX 的系统上,使用以下约定:
- 如果
-name NAME在命令行上给出,NAME则用作实例名称。- 否则,如果
RESOURCE_NAME设置了环境变量,其值将用作实例名称。- 否则,用于调用程序的名称的尾随部分(
argv[0]去除任何目录名称)将用作实例名称。一个字符串,用于命名拥有此窗口的客户端所属的应用程序的一般类。由类指定的资源适用于所有具有相同类名的应用程序。类名由应用程序编写者指定。常用类名的示例包括:“Emacs”、“XTerm”、“XClock”、“XLoad”等。
请注意,
WM_CLASS字符串以空字符结尾,因此与STRING属性以空值分隔的一般约定不同。这种不一致对于向后兼容是必要的。
(粗体强调是我加的)