GTK 4.14 在辅助功能方面带来了各种改进,特别是对于显示复杂、格式化文本的应用程序;对于 WebKitGTK;以及对于通知。
可访问文本接口
4.0 版本的辅助功能重写为 GTK 提供的部件(如 GtkTextView
)中的复杂、可选择和格式化文本提供了一个实现,但是树外的部件无法做到这一点,因为在我们讨论 AT(辅助技术)实际需要什么以及我们研究非 Linux 实现时,API 保持私有。对于 GTK 4.14,我们终于有了一个公共接口,树外的部件可以实现该接口,以向 AT 提供复杂、格式化的文本:GtkAccessibleText。
GtkAccessibleText
允许部件在给定偏移量处提供文本内容;应用于内容的文本属性;以及通知辅助技术文本、插入符位置或选择边界的变化。
实现 GtkAccessibleText
的文本部件应在以下情况下通知 AT
-
- 如果文本部件具有插入符光标,则每次插入符移动时,都需要调用
gtk_accessible_text_update_caret_position()
- 如果文本部件具有选择,则每次选择更改时,都需要调用
gtk_accessible_text_update_selection_bound()
- 当文本更改时,部件需要调用
gtk_accessible_text_update_contents()
,其中包含对更改内容的描述以及更改的边界
- 如果文本部件具有插入符光标,则每次插入符移动时,都需要调用
文本属性主要由应用程序实现——无论是在命名还是序列化方面;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
,现在可以通过 gtk_accessible_announce()
方法将通知消息发送到 AT,这要归功于 Lukáš Tyrychtr,其方式尊重当前的 AT 输出。
其他改进
GTK 4.12 确保计算出的可访问标签和描述与 ARIA 规范保持同步;GTK 4.14 通过删除特殊情况和重复项来迭代这些改进。
感谢来自 The Document Foundation 的 Michael Weghorn 的工作,为与文本相关的可访问对象提供了新的角色,如段落和注释,以及在辅助功能 API 的 AT-SPI 实现中的各种修复。
感谢许多人的贡献,GTK4 中的辅助功能支持正在每个周期逐步改进;理想情况下,这些改进还应为工具包和辅助技术共享提供更好、更高效的协议。
我们仍在探索为其他辅助功能平台(如 UIAutomation)以及其他库(如 AccessKit)添加后端的可能性。