GTK 4.14 在辅助功能方面带来了各种改进,特别是对于显示复杂格式化文本的应用程序、WebKitGTK 以及通知。
可访问文本接口
4.0 的辅助功能重写为 GTK 提供的部件(如 GtkTextView
)中复杂的、可选择的和格式化的文本提供了一个实现,但树外部件无法做到这一点,因为 API 在我们讨论 AT(辅助技术)实际需要什么以及我们研究非 Linux 实现时保持私有。对于 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 通过删除特殊情况和重复项来迭代这些改进。
感谢来自 文档基金会的 Michael Weghorn 的工作,文本相关的可访问对象有了新的角色,例如段落和注释,以及辅助功能 API 的 AT-SPI 实现中的各种修复。
由于许多人的贡献,GTK4 中的辅助功能支持正在随着每个周期逐步改进;理想情况下,这些改进也应导致工具包和辅助技术共享的更好、更高效的协议。
我们仍在探索为其他辅助功能平台(如 UIAutomation)和其他库(如 AccessKit)添加后端的可能性。