无障碍功能的演进

我们上次关于 GTK4 中无障碍功能的文章还是很久之前,是时候更新一下了。

值得庆幸的是,现在 Red Hat 的 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,
                                  ...)

这些 API 让应用程序可以设置其小部件的无障碍属性。

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 将具有更好的开箱即用的无障碍功能和新工具,以帮助您使您的应用程序可访问。

祝您使用愉快!❤️