Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions docs/explanation/accessibility-architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Architecture of the accessibility stack

## Software Interfaces for assistive technologies

### AT-SPI

The Assistive Technology Service Provider Interface (AT-SPI) is a platform-neutral framework for bi-directional communication between assistive technologies (AT) and applications.

AT-SPI defines a set of interfaces for assistive technologies which allow to get names, roles and states of interface objects, listen for events, or perform actions.

AT-SPI uses D-Bus method calls and signals. D-Bus is an inter-process communication system in Linux, which makes AT-SPI a default accessibility framework for Linux.

AT-SPI is made of two components:

* `at-spi2-core`: a collection of XML interfaces for accessibility
* `at-spi2-atk`: a library that allows applications made with GTK 3 to register accessible objects with AT-SPI

If you are building custom assistive technology tools or want to test the accessibility of custom applications that were not built with GTK on Ubuntu Desktop, you must use [AT-SPI DBus XML Interfaces](../reference/accessibility/dbus/index.md)

### GTK4 and Gtk.Accessible

GTK4 is a newer version of GTK that *does not* integrate with ATK. Instead, GTK4 implements its own [Gtk.Accessible](https://docs.gtk.org/gtk4/iface.Accessible.html) interface.

If you are building an application for Ubuntu Desktop and want to make it accessible for Ubuntu Desktop's default assistive technologies such as Orca, it is recommended that you use GTK. Desktop's assistive solutions are able to access information about the apps built with both GTK3 and GTK4.

If you are using a different UI toolkit, you must ensure it implements the AT-SPI D-Bus interfaces; otherwise, Desktop's assistive technologies wouldn't be able to interact with it.

### GTK3 and ATK

GTK is a cross-platform widget toolkit for creating graphical user interfaces. It offers a set of user interface elements that allow developers to build apps quickly and in a consistent manner. The majority of applications within GNOME desktop environment are built with GTK.

GGTK3 version of the toolkit integrates with Accessibility Toolkit (ATK). Applications built with GTK3 expose information about UI objects using the ATK. ATK is an Application Programming Interface (API) that allows developers to avoid working with AT-SPI API directly, as it provides a set of special input methods.

### Flutter

A selection of applications on Ubuntu Desktop such as [App Center](https://github.com/ubuntu/app-center) are built with Flutter. Flutter engine has compatibility issues with AT-SPI. To learn how to make Fluuter applications that would be compatible with Ubuntu Desktop's default assistive solutions, reach out to the development team at [Discourse](https://discourse.ubuntu.com/tag/flutter).


### Overview of Ubuntu Desktop applications and their interfaces

| Application | Built with | API |
| ------------------------ | ------------- | ------------------------------------------------------------------ |
| Gnome Initial Setup | GTK4 | [Gtk.Accessible](https://docs.gtk.org/gtk4/iface.Accessible.html) |
| Login and Lock screens | GTK3 | [ATK](https://docs.gtk.org/atk/) |
| System Settings app | GTK4 | [Gtk.Accessible](https://docs.gtk.org/gtk4/iface.Accessible.html) |
| App Center | Flutter | [Flutter API](https://docs.flutter.dev/ui/accessibility-and-internationalization/accessibility) |
| Software and Updates | GTK3 | [ATK](https://docs.gtk.org/atk/) |
2 changes: 1 addition & 1 deletion docs/explanation/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ Our explanatory and conceptual guides are written to provide a better understand
:::{toctree}
:maxdepth: 2

accessibility-architecture
what-is-the-menu-key
:::

7 changes: 6 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ Line 2

Tutorials </tutorial/index>
How-to guides </how-to/index>
Reference </reference/index>
Explanation </explanation/index>
Reference </reference/index>
:::

## In this documentation
Expand Down Expand Up @@ -49,3 +49,8 @@ Explanation </explanation/index>
TODO
:::
::::


* **Accessibility**: [Accessible features in Desktop](how-to/accessibility/index.md) | [Accessibility stack](explanation/accessibility-architecture.md) | [AT-SPI DBus XML interfaces](reference/accessibility/index.md)


41 changes: 41 additions & 0 deletions docs/reference/accessibility/dbus/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# AT-SPI DBus XML interfaces

AT-SPI (Assistive Technology Service Provider Interface) is the core of an accessibility stack for Ubuntu Desktop.

It provides a list of methods, signals, and properties provided by a D-Bus service, in an XML format. These methods define what operations an assistive technology can perform or request on UI elements.


:::{toctree}
:maxdepth: 1

org.a11y.atspi.Accessible
org.a11y.atspi.Action
org.a11y.atspi.Application
org.a11y.atspi.Cache
org.a11y.atspi.Collection
org.a11y.atspi.Component
org.a11y.atspi.DeviceEventController
org.a11y.atspi.DeviceEventListener
org.a11y.atspi.Document
org.a11y.atspi.EditableText
org.a11y.atspi.Event.Document
org.a11y.atspi.Event.Focus
org.a11y.atspi.Event.Keyboard
org.a11y.atspi.Event.Mouse
org.a11y.atspi.Event.Object
org.a11y.atspi.Event.Terminal
org.a11y.atspi.Event.Window
org.a11y.atspi.Hyperlink
org.a11y.atspi.Hypertext
org.a11y.atspi.Image
org.a11y.atspi.Registry
org.a11y.atspi.Selection
org.a11y.atspi.Socket
org.a11y.atspi.Table
org.a11y.atspi.TableCell
org.a11y.atspi.Text
org.a11y.atspi.Value
:::



Loading
Loading