在 1 月 28 日至 1 月 31 日期间,GTK 团队在布鲁塞尔举办了现在的第三届 黑客节。
黑客节的主要议题是
- GTK4 下一个开发快照的时间表
- 阻碍 GTK 4.0 发布的缺失功能
- 工具包中可访问性支持的当前状态
前两项占据了黑客节前两天的大部分时间;您可以阅读GTK 3.98 发布公告,了解自 3.96 版本发布以来,过去 300 天我们一直在做的事情。缺失的功能有
- 用于键盘快捷键的事件控制器
- Wayland 上可移动的弹出窗口
- 行回收列表和网格视图
- 动画 API
所有这些都在主题分支中进行开发。键盘快捷键分支最近已经重新构建,并且正在进行文档编写和清理;可移动的弹出窗口在经过几次迭代后也正在审查中。最后两个剩余的分支相当庞大,需要更多的迭代才能使它们正确——而动画 API 目前主要是一个原型。
黑客节的最后一个主题是最大的,也是早就应该进行的讨论。
GTK 的可访问性支持由 Sun 可访问性团队作为 GTK 2.0 版本的一部分添加;它依赖于 ATK(辅助工具包)提供的抽象数据类型,然后在 GTK 类(如 GtkWidgetAccessible
或 GtkEntryAccessible
)中具体实现。每个小部件都有一个与其关联的“可访问”对象,该对象要么由 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 元素是否具有正确的可访问描述和链接
wiki 上提供了有关笔记和路线图的更多信息,我们已经安排了今年夏天的额外检查点会议。
还有很多工作要做,但我们现在对这种重新设计的范围和交付成果有了更清晰的认识。如果您想帮助加快事情的发生,请随时加入这项工作;您也可以向 GNOME 基金会捐款。
GTK 团队感谢 GNOME 基金会赞助场地和与会者,以及感谢 Hypra 的好人在黑客节加入并解释用例和可访问性堆栈的当前状态,并为开发方面提供帮助。