在 1 月 28 日至 1 月 31 日之间,GTK 团队在布鲁塞尔举办了第三届黑客节。
黑客节的主要议题是
- GTK4 下一个开发快照的时间表
- 阻碍 GTK 4.0 发布的功能缺失
- 工具包中可访问性支持的当前状态
前两个议题占据了黑客节前两天的大部分时间;您可以阅读GTK 3.98 发布公告,了解自 3.96 版本发布以来的过去 300 天里我们一直在做的事情。缺失的功能有
- 键盘快捷键的事件控制器
- Wayland 上可移动的弹出窗口
- 行回收列表和网格视图
- 动画 API
所有这些都在主题分支中进行开发。键盘快捷键分支最近已重新构建,并且正在进行文档编写和清理;可移动的弹出窗口也在经过几次迭代后进行审查。最后剩下的两个分支相当大,需要进行更多的迭代才能正确处理——其中动画 API 目前主要是一个原型。
黑客节的最后一个议题是最大的,也是早就应该进行的讨论。
GTK 的可访问性支持由 Sun 可访问性团队作为 GTK 2.0 版本的一部分添加;它依赖于 ATK(辅助工具包)提供的抽象数据类型,这些数据类型然后在 GtkWidgetAccessible
或 GtkEntryAccessible
等 GTK 类中具体实现。每个小部件都有一个与其关联的“可访问”对象,该对象要么由 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 的朋友们参加黑客节,解释用例和可访问性堆栈的当前状态,以及在开发方面提供帮助。