不断发展的辅助功能

我们上一篇关于 GTK4 中辅助功能的帖子是一段时间之前的事了,现在是时候更新一下了。

值得庆幸的是,我们在红帽的 Lukáš Tyrychtr 现在正在致力于辅助功能方面的工作。

辅助功能 – 它如何工作?

从 GTK3 到 GTK4,辅助功能方面的一个较大变化是,我们有了一个新的应用程序 API,该 API 以 Web 上的 ARIA 规范为模型。

需要记住的总体情况是

app → ARIA → AT-SPI → accessibility bus → AT

这里的 AT 代表辅助技术。在实践中,这主要意味着 orca,这是一个知名的屏幕阅读器(尽管有一个新的竞争者,即 odilia 项目)。

新的层提供了诸如以下 API:

void gtk_accessible_update_state (GtkAccessible *self,
                                  GtkAccessibleState first_state,
                                  ...)

允许应用程序设置其窗口小部件的辅助属性。

ARIA 层改进

自从我们在 GTK4 中引入它以来,应用程序 API 层只看到了适度的变化。这种情况在过去 9 个月左右开始发生变化,因为 Lukáš 正在致力于此。

他开始做的一件事是添加公共接口,以便第三方窗口小部件(例如 libadwaita)可以提供完整的辅助功能支持。第一个这样的接口是 GtkAccessibleRange(4.10 中新增),用于范围窗口小部件,如 GtkScale。我们正在考虑添加更多接口,特别是文本接口。这将是使终端具有辅助功能所必需的。

在 4.12 周期中,我们做了一些工作,使我们的实现更紧密地匹配 ARIA 规范。这涉及更改某些窗口小部件的角色:我们现在的默认角色是“generic”,而顶级窗口使用“application”角色。我们还重新设计了计算辅助名称和描述(即您听到 orca 读取的内容)的方式,以匹配规范

另一个改进是,我们的大多数窗口小部件现在都具有必要的标签和关系,以使 orca 可以读取它们。如果您发现仍然缺少某些内容,请告诉我们!

AT-SPI 转换改进

我们希望看到对 AT-SPI D-Bus API 进行一些现代化改造,这已不是什么秘密。但目前,我们只能使用它。我们的转换层通过仅将 AT 请求的对象惰性地放置在总线上来工作,以避免创建过多的总线流量。

我们转换的最新改进之一是,我们现在正在使用 GtkAccessibleRange,因此第三方范围窗口小部件也可以访问。

我们还修复了 GtkNotebookGtkStackSwitcher 的选择实现问题,因此 AT 现在可以更改笔记本和堆栈中选定的选项卡。

工具

听到这些都很好,但如果您是应用程序开发人员,您可能想知道如何查找和修复应用程序中的辅助功能问题。

只需打开屏幕阅读器并查看在您浏览应用程序时它会说什么,就很有启发意义。但我们也有一些工具可以帮助您评估应用程序的辅助功能支持。

GTK 检查器有一个页面显示辅助功能信息

GTK 检查器中的辅助功能选项卡最近对其进行了改进,不仅显示了每个窗口小部件上设置的属性、状态和关系,还显示了 GTK 计算并传递给 AT 的名称和描述 - 这就是 orca 读取的文本。

检查器中的另一个工具是全新的:辅助功能叠加层显示基于 ARIA 创作指南的警告和建议。

它看起来像这样

显示辅助功能叠加层警告的窗口,以及带有启用叠加层开关的检查器窗口。它并不完美,但它应该可以提供一些关于您可以在哪里改进辅助功能的快速见解。

总结

GTK 4.12 将具有更好的开箱即用辅助功能和新工具,以帮助您使应用程序具有辅助功能。

享受吧!❤️