Re: [g-a-devel] D-Bus replacement for AT-SPI Accessibility



Hello everyone,

In consideration of the removal of ORBit from Gnome 3.0 I thought that a
more detailed analysis of the status of AT-SPI D-Bus was necessary for
all involved.

All of this e-mail has also been placed on the Wiki at
http://linuxfoundation.org/en/Accessibility/ATK/AT-SPI/AT-SPI_on_D-Bus.

I'll try to keep the wiki updated as my work progresses. I haven't put
any time estimates to these tasks, that perhaps something to do this
week. The one task that I am currently undertaking is refactoring /
improving the DeviceEventController. John Carr has also started some
debian packaging work.

Thanks

Mark

------------

AT-SPI D-Bus is a translation of the AT-SPI interface originally
specified in CORBA idl. The project implements a number of ORBit based
libraries and programs in D-Bus.

These modules are:

- atk-bridge
- cspi
- pyatspi
- registryd
- loginhelper

I will go through the status of each of these as well as work required
on the D-Bus interface itself and infrastructure work needed outside of
the AT-SPI D-Bus project.

atk-bridge
----------

The atk-bridge is a GTK module that exposes a tree of ATK objects over
AT-SPI D-Bus. It is the server / provider library for ATK. Most
interfaces have been completed, and a number have unit tests associated
with them.

- The 'Collection' and 'StreamableContent' interfaces still need to be
implemented. Some code has been written but is currently not built and
has not been tested.

registryd
---------

The registry daemon has two distinct tasks.

1) Keeping track of all the accessible applications on the desktop.
2) Dealing with and forwarding X events over AT-SPI D-Bus.

The registry of accessible applications is relatively simple and has
been fairly well tested.

- DeviceEvents are given non-valid D-Bus message names.

- The DeviceEventController object that handles X events needs to be
re-factored.

- Possibly XEVIE code should be removed as this will not be available in
future X.org releases.

pyatspi
-------

A client side library, in python, for access to AT-SPI accessibility
information.

- All D-Bus method calls in python are synchronous and are not
re-entrant. This can cause deadlock. Need to make a re-entrant D-Bus
method call available in python and change all synchronous calls over to
this.

cspi
----

A client side library in 'C' for access to AT-SPI accessibility information.

It is unknown how much work is required to complete this library. It has
been working and tested previously, but has not been updated with
protocol changes and has never been heavily tested.

loginhelper
-----------

An extension for enabling accessible login.

Unsure

D-Bus specification
-------------------

As well as the libraries using the AT-SPI D-Bus specification some work
may still be required on the specification itself.

The D-Bus specification has been written in Telepathy D-Bus XML.

- Investigate the correctness of the 'Collection' and
'StreamableContent' interfaces. This goes along with implementing these
interfaces in the atk-bridge.

- Write XSLT to convert Telepathy XML into readable documentation.

- Possibly re-write the specification in in a yet-to-be-decided D-Bus IDL.

- Create new interfaces for management of large or infinite spaces.

As well as this additional interfaces may be required for the management
of accessible object life-cycle within infinite or very large
containers. In the Bonobo / ORBit specification accessible objects were
remotely reference counted and this was used as the method to manage
their life-cycle within very large containers. Remote reference counting
has been removed, meaning that new interfaces may be required.

The importance of this is possibly over-stated. Firefox exposes the
entire DOM and does not have this problem. Open office exposes only the
objects visible on-screen and therefore sidesteps this issue.

Infrastructure
--------------

In this section I will look at the work that may be necessary outside of
the D-Bus AT-SPI code-base.

Multi-user accessibility
------------------------

It is a requirement of the D-Bus AT-SPI system that applications running
as other users, most importantly the root user, are made accessible on
the desktop.

D-Bus does not have a multi-user bus, meaning some work will be required
to make D-Bus AT-SPI work in the multi user case. D-Bus session busses
are not, as sometimes imagined, per-X-session. The session bus is
per-X-session, per-user.

AT-SPI D-Bus would prefer an 'X session' D-Bus bus, as this would allow
applications to run as root within the same X session and remain
accessible. This will require liaison with the D-Bus community, to make
our case for an X session bus. If this isn't possible D-Bus AT-SPI
should create its own, exclusive, D-Bus bus that is tied to the X session.

This would still require some core D-Bus work as the D-Bus bus program
currently won't allow connections from a different users. This would
have to be turned into an optional feature.

Remote Accessibility
--------------------

This is the requirement to load a program remotely and have it
accessible on the local desktop. The multi user work is a prerequisite
for this. Possibly the best solution is to have an ICE transport for D-Bus.

GtkTreeView
-----------

GtkTreeView widgets currently declare themselves as 'Manages
descendants' indicating that the accessible objects are not referenced
by their parent widget. This is related to the infinite space issue in
that a GtkTreeView acts as-if it were a very large or infinite container
and requires remote reference counting.

We believe that this is an implementation issue related to GtkTreeView.
GtkTreeView only creates widgets for items in the tree when they are
requested. The space is not neccessarily large and it should be possible
to expose the entire tree in most / all cases. This may involve creating
accessible objects for the TreeModel rather than the TreeView. Hopefully
this problem will only require additions to Gail.

GNOME Priorities
----------------

This is a list of thing that I personally believe need to get done for
inclusion in Gnome 3.0.

High Priority
-------------

Multi-user accessibility - Required for accessible system administration.

Cspi - There has been alot of discussion about whether to complete cspi,
or a subset of cspi. I think that there is enough programs currently
using it that we would preferably complete it. There is no guarantee
that LDTP will have moved over to pyatspi by the transition. If we do
not complete cspi we will need a new 'C' interface that may be a similar
amount of work to complete.

Pyatspi - Not a-lot of work. Need to create re-entrant method calls.

atk-bridge. - Need a solution for the collection interface and for the
streamable content interface.

registryd - Need to refactor the DeviceEventController, and ensure that
without XEVIE we can meet all requirements for device events.

GtkTreeView - This needs to be solved, it makes GtkTreeViews either
inaccessible or causes us to hold lost references to accessible objects.

Low Priority
------------

Readable documentation / specification for the D-Bus interface.

Accessible remote applications.

Infinite space containers

Packaging and Gnome integration
-------------------------------

Some packaging work will be required. At least provide debian packages
as an example of preferred package structure and dependancies.

The git repository has a branch 'debian' that has a debian/ folder for
building some initial debian pakages.

Gnome integration will be required, a jhbuild module and tests building
AT-SPI D-Bus using jhbuild.

Thanks for your attention,

(Surely no-one made it this far)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]