GTK 4.14 中的辅助功能改进

GTK 4.14 在辅助功能方面带来了各种改进,特别是对于显示复杂、格式化文本的应用程序;对于 WebKitGTK;以及对于通知。

可访问文本接口

4.0 的辅助功能重写为 GTK 提供的窗口小部件(如 GtkTextView)中的复杂、可选择和格式化文本提供了一个实现,但树外小部件无法执行相同的操作,因为在讨论 AT(辅助技术)实际需要什么以及查看非 Linux 实现时,API 一直保持私有状态。对于 GTK 4.14,我们终于有了一个公共接口,树外小部件可以实现该接口,以向 AT 提供复杂、格式化的文本:GtkAccessibleText

GtkAccessibleText 允许窗口小部件提供给定偏移处的文本内容;应用于内容的文本属性;并通知辅助技术文本、插入符位置或选择边界的变化。

实现 GtkAccessibleText 的文本小部件应在以下情况下通知 AT

文本属性主要由应用程序来实施 - 包括命名和序列化;GTK 为各种工具包和辅助技术已使用的常用文本属性提供支持,它们在API 参考中以 GTK_ACCESSIBLE_ATTRIBUTE_* 前缀的形式提供。

GtkAccessibleText 接口是实现虚拟终端辅助功能的必要条件;最常见的基于 GTK 的虚拟终端库 VTE,由于 Christian Hergert 的努力,已移植到 GTK4,并且在 GNOME 46 中将通过新的 GTK 接口支持辅助功能。

桥接 AT-SPI 树

在某些情况下,库或应用程序会使用 AT-SPI 实现自己的可访问树,无论是在同一进程中还是在进程外。WebKitGTK 就是这样一个库,它从单独进程内的 Web 树生成可访问的对象树。这些进程不使用 GTK,因此它们不能使用 GtkAccessible API 来描述其内容。

由于 Georges Stavracas 的工作,GTK 现在可以将这些辅助功能对象树桥接到 GTK 窗口小部件下,从而允许 AT 从 UI 导航到使用 WebKit 的网页。

目前,与 GTK 中其余的辅助功能 API 一样,这特定于 Linux 上的 AT-SPI 协议,这意味着希望利用它的库和应用程序需要确保该 API 在编译时可用,方法是使用 pkg-config 文件和一个单独的 C 标头,类似于公开打印 API 的方式。

通知

使用与当前窗口小部件焦点分离的应用程序内通知(例如 libadwaita 中的 AdwToast)的应用程序,现在可以借助 Lukáš Tyrychtr 的帮助,通过 gtk_accessible_announce() 方法,以尊重当前 AT 输出的方式,向 AT 发出通知消息。

其他改进

GTK 4.12 确保了计算出的可访问标签和描述与 ARIA 规范保持同步;GTK 4.14 通过删除特殊情况和重复项来迭代这些改进。

由于来自 The Document Foundation 的 Michael Weghorn 的工作,现在有了文本相关的可访问对象的新角色,例如段落和注释,以及辅助功能 API 的 AT-SPI 实现中的各种修复。

由于许多人的贡献,GTK4 中的辅助功能支持正在每个周期逐步改进;理想情况下,这些改进还应该为工具包和辅助技术共享提供更好、更高效的协议。

我们仍在探索为其他辅助功能平台(如 UIAutomation)以及其他库(如 AccessKit)添加后端的可能性。