GTK 黑客节 2020 — 路线图和可访问性

在 1 月 28 日至 31 日期间,GTK 团队在布鲁塞尔举办了第三届黑客节

黑客节的主要议题是:

  • GTK4 下一个开发快照的计划
  • 阻碍 GTK 4.0 发布的缺失功能
  • 工具包中可访问性支持的当前状态

前两个议题占据了黑客节头两天的大部分时间;您可以阅读GTK 3.98 发布公告,了解自 3.96 版本发布以来,过去 300 天我们一直在进行的工作。缺失的功能包括:

  • 键盘快捷键的事件控制器
  • Wayland 上可移动的弹出窗口
  • 行回收列表和网格视图
  • 动画 API

所有这些都在主题分支中进行开发。键盘快捷键分支最近已重新基于,并且正在进行文档编写和清理工作;可移动弹出窗口在几次迭代后也在审查中。最后两个剩余的分支相当庞大,需要更多的迭代才能使其正确—其中动画 API 目前主要是一个原型。

黑客节的最后一个议题也是最大的,也是一个早就应该进行的讨论。

GTK 的可访问性支持是由 Sun 可访问性团队作为 GTK 2.0 版本的一部分添加的;它依赖于 ATK(可访问性工具包)提供的抽象数据类型,然后在 GTK 类(如 GtkWidgetAccessibleGtkEntryAccessible)中具体实现。每个小部件都有一个与之关联的“可访问”对象,该对象要么由 GTK 自动创建,要么在子类化 GTK 小部件时由应用程序代码提供。非小部件类型也可以有与之关联的可访问对象—最值得注意的是树视图和组合框的单元格渲染器集。在这一切的底层,是 AT-SPI,这是一种由 AT(辅助技术,如屏幕阅读器)使用的协议,用于使用应用程序提供的数据。通常,AT 将使用像 libatspi 这样的库来处理协议本身。

现有堆栈的主要问题是:

  • 由于 ATK 的存在,导致了大量的间接调用;任何新功能或错误修复都需要在 ATK 内部定义,然后实现到 GTK 和 libatspi 中
  • ATK 是在非常不同的环境中编写的,虽然它已经看到了一些弃用,但它在它所做的假设(如全局坐标空间)和设计中都显示出它的年代久远
  • AT 要求和 GUI 测试要求之间存在一定的重叠,最终导致 API 设计中的摩擦
  • 自从 Sun 可访问性团队解散以来,该堆栈已经失修;大部分正在进行的工作仍然主要发生在 AT 领域(如 Orca)和 Web 浏览器中
  • 整个堆栈是在 CORBA 成为一种技术时编写的,然后在 GNOME3 时代及时移植到了 DBus;然而,该协议实际上效率不高,需要大量的往返来移动少量的数据,而不是进行批量操作和通知

最后一点也是我们需要单独的可访问性总线的原因,以避免垃圾邮件发送到会话总线,并在启用可访问性支持后使一切变慢。单独的总线意味着我们需要在任何沙箱中打开一个额外的漏洞,并且仍然让任何连接到可访问性总线的程序都有可能窥探到每个应用程序中发生的事情。

最后,GTK 仅支持 Linux 上的可访问性;macOS 或 Windows 没有支持,这意味着用 GTK 编写并移植到其他平台的应用程序在那里对 AT 不可访问。由于我们在 API 中公开了 ATK,因此在其他平台上添加对可访问性功能的支持将需要桥接 ATK,从而增加复杂性。

由于我们想重新设计和更新 GTK4 中的可访问性功能,我们需要了解可访问性堆栈现有消费者的需求,以及我们需要定位哪种用例。为此,我们请Hypra公司(一家致力于基于自由和开源软件开发可访问解决方案的公司)来帮助我们。

Hypra 开发人员熟悉 GNOME,并且一直在研究 Linux 可访问性堆栈。他们的客户涵盖了广泛的可访问性用户,因此他们最适合描述在日常生活中实际使用哪种 AT。

从工具包到合成器,堆栈的不同层必须提供各种各样的工具和功能;应用程序开发人员也必须能够访问必要的工具,以便为 AT 提供适当的支持,因为他们比工具包更了解他们的应用程序应该是什么样子和行为。

在两天的时间里,我们确定了一个前进的计划:

  • 从堆栈中删除 ATK,并让 GTK 直接与 AT-SPI 协议对话;这类似于 Qt 从工具包端所做的事情,并且更容易扩展和验证最终的协议更改
  • 清理 AT-SPI 协议本身,在需要时更新它,使其在更有效地使用 DBus 方面进行改进
  • 删除全局可访问性总线,并让 AT 与每个应用程序协商对等连接
  • 让 AT 要求合成器收集全局状态(如键盘快捷键),而不是与应用程序对话(然后应用程序必须询问窗口系统,如果可能的话),否则在不可能的情况下返回无效数据
  • 将 GUI 测试与可访问性分离
  • 为应用程序开发人员编写小部件和应用程序编写指南,并提供可以作为构建和 CI 过程的一部分使用的验证工具,以检查 UI 元素是否具有正确的可访问描述和链接

有关说明和路线图的更多信息,请参见维基,我们已经计划了今年夏天的另一次检查点会议。

有很多工作要做,但现在我们对这种重新设计的工作范围和可交付成果有了更清晰的了解。如果您想帮助加快事情的进展,请随时加入我们的工作;您也可以向GNOME 基金会捐款。

GTK 团队感谢 GNOME 基金会为场地和与会者提供的赞助,以及感谢 Hypra 的各位加入黑客节,解释用例和可访问性堆栈的当前状态,并为开发方面提供帮助。