[Question] GTK3 and GTK4: How broken is Accessibility on non Linux Platforms?

Hello.
I just registered a couple Minutes ago. I hope I chose the correct Category.

Short Question is as above. More Details:
While trying to leave the Qt Framework behind, I am looking for a new GUI Framework / Toolkit. As I also want to switch to Rust: After a lof of filtering, I am currently looking at 2 Choices: wxWidgets and GTK 3 or 4.

The Information on the Web and also the GitLab Instance are a total mess. I hope someone can clarify something for me. Am I right with the following observations:

  • GTK 3.x latest Versions: Only Accessibility Support on Linux because the unmaintained, buggy and partially insecure backend has been removed for WIN32 etc. ?
  • GTK 3.x some older Version(s): Accessibility Support for Linux and WIN32 but partly broken
  • GTK 4: No Accessibility Support whatsoever? Plan to add it eventually. Maybe in 12+ Months if at all as it currently stand looking at the amount of open Issues (personal Gut Feeling here!).

EDIT01: Is there a really up2date overview what is broken in what Version somewhere?

Thanks!
Oliver

No. GTK3 has no support for accessibility API on Windows or macOS. Never had, and won’t get it in the future, as the toolkit is feature and API frozen.

GTK4 has a completely new accessibility API for widget and application developers; underneath it, it “speaks” the same protocol as GTK2, GTK3, Qt, and web browsers—i.e. AT-SPI.

There is currently no implementation for assistive technologies on non-Linux platforms, but the new API in GTK4 is designed to be portable from day 1.

1 Like

Thanks @ebassi

What exactly does this mean “Designed to be portable from day 1”? Is this a private or public API? Only meant to be accessible from within / between the GTK Widgets etc.?

Or is it (also)?) meant for GTK Users to grab the AT-API to be able to reimplement Widgets on other Platforms with the AT-API enabled?

If there is a Link I missed to e.g. some not-too-outdated GTK4 AT-API Documentation, which has more Details, I would gladly try to wrap my head around this. Thanks :slight_smile:

P.S.: Sorry first-time Discourse User here: Need to learn how to correctly quote…

There is a public API for application and widget developers, which is used to express relations between widgets, widget states, and other properties. Application developers can use the GtkAccessible API, and can also define accessible roles, properties, states, and relations in the UI definition files parsed by GtkBuilder.

The internal implementation is private, and can have multiple backends—one of which is the AT-SPI backend, and another is a test backend we use to ensure that the accessibility support inside GTK is working correctly. A Windows or macOS backend would be implemented at that level. Again: this is a private API, so it’s not really important for application developers.

AT-SPI is Linux/Unix-only.

The GtkAccessible interface is the user-facing API for the GtkATContext backend objects, which (on Linux) provide corresponding objects on the accessibility bus, and those objects implement the AT-SPI DBus interfaces that can be consumed by assistive technologies like Orca.

I’ve linked various bits of documentation that might help you understand the design. Additionally, you may want to read an introductory article on the GTK development blog, but that’s mostly about terminology.

2 Likes

Again thank you @ebassi

It seems I have a lot of reading Material for the next weeks.

1 Like

No worries. If you have questions, feel free to ask here, or in the #gtk:gnome.org channel on Matrix.

1 Like