[Accessibility] Orca/KDE Integration
garycramblitt at comcast.net
Mon Aug 28 14:33:59 PDT 2006
Thanks for your comments Bill.
On Monday 28 August 2006 08:24, Bill Haneman wrote:
> On Sat, 2006-08-26 at 12:02, Olaf Jan Schmidt wrote:
> > Hi Gary!
> > Thanks a lot for your work on this.
> > I fully agree that the D-Bus version of AT-SPI should use the IDL. We
> > want to make the migration as easy as possible.
> > Some additional thoughts:
> > * It is impossible to run two registries in parallel because of the way
> > XEvie is written.
> To be more specific, XEvie only allows one client per Xserver DISPLAY,
> currently. This means that two registries in parallel would not both be
> able to communicate with XEvie.
From the XEvIE 1.1 spec:
"The XevieStart? function requests that the X server enable XEvIE extension.
Only one client at a time can enable XEvIE extension. Once XEvIE is
successfully enabled, all the XevieSelectInput? specified events will be sent
to the client who enable XEvIE. If XKB or AccessX? is enabled, the events
that are sent to XEvIE clients are XKB/AccessX processed (filtered) ones. The
XEvIE client takes full responsibility to handle the events. The events can
be sent back to X server through XevieSendEvent? and can be consumed by the
XEvIE client. Start from Ver1.1, XEvIE allows multiple clients to enable
XEvIE extension in Read-only mode. Only one client at a time can obtain the
write permision by invoking XevieLockWriteChannel?. The client who has write
permision takes full responsibility to handle the events."
From this, my interpretation is that two cooperating registries could receive
events. One would have to be the "master" and the other a "slave" that
forwards the write requests to the master. Ideally, both the Gnome and the
KDE registries could act as either master or slave.
> The current Registry: interface doesn't directly use Xevie though - the
> interface whose implementation requires XEvie is called
> DeviceEventController. DeviceEventController is responsible for device
> event notification and synthesis.
> One possibility would be to have two Registry instances, but only one
> DeviceEventController. Because clients of "both flavors" of Registry
> would need access to DeviceEventController, you would still need somehow
> to either proxy the singleton D.E.C. or have the D.E.C. speak both
That sounds like a possible approach.
> But really, more than this would be needed to solve the problem of
> interoperability. If there are two Registries (and two AT-SPI
> protocols, which is implied by all this), then in order for AT written
> to either wire protocol to work with the whole desktop, the two
> protocols/registries would have to proxy one another.
It is my intention to use the same AT-SPI IDL files as Gnome, so the
accessibility "protocol" is the same, but the wire protocol is different.
> > Maybe it makes more sense to have a registry that can speak both
> > CORBA and D-Bus (via modules). Does the current CORBA AT-SPI registry
> > code support a move to D-Bus?
> I am not sure what you mean by "does the code support a move to DBus".
> I think there are a number of significant obstacles to such a move but
> if they can be removed, I think the codebase could be changed fairly
> easily. There is not a whole lot of CORBA-specific code in the
> at-spi/registryd/*.c codebase.
I browsed the code briefly last night. It appeared to have a lot of CORBA
stuff to me. I came away very discouraged. I will take another look with
an eye towards the D.E.C strategy you mentioned. :/
> > * There is a compiler that generates various D-Bus bindings from an XML
> > description. If it is possible to express the whole IDL in D-Bus
> > Introspection XML, then we would get bindings for all languages and
> > toolkits supported by D-Bus. Otherwise it might perhaps be possible to
> > reuse code.
> I think we should be really careful to avoid using XML in our standard
> RPC protocol here, for performance reasons. But for instrospection
> along (i.e. interface query and obtaining interface handles) I guess it
> would be fine. I am not sure what exactly you are proposing above.
The current D-Bus XML spec falls way short of the needs for AT-SPI. There are
no enumerations, no way to embed comments, and no way to type objects
beyond "o" = object reference. I understand they are working on some of
these things for the next iteration of D-Bus.
The only way I can see the XML being useful right now is in addition to the
AT-SPI IDL files. If one assumes that the XML is in sync with the IDL files,
then the XML could be useful for generating the wire protocol part of the
code. One approach that has occurred to me is to use the dbus-binding-tool
to generate .c code from the XML, then wrap that code in a Python extension
module using SIP. But this approach doesn't really gain a whole lot other
than producing a bunch of .c files that can be re-used in other projects,
but easily generated as needed anyway. It does eliminate the need for using
the dbus-python bindings in Orca, so its an approach I am still considering,
given that dbus-python has some limitations. OTOH, writing (and maintaining)
all that .sip code is not something I want to do.
> Perhaps it would make more sense to use the D-Bus binding generator you
> mention as a codebase for extension to IDL, i.e. use it to build an IDL
> compiler rather than go from IDL to XML and then D-Bus.
> It may be that DBus Introspection XML is not a good fit, but that some
> other extension to DBUS, or some other API built on top of DBus, is.
> One thing that worries me a little is talk of Orca "integration" if in
> fact the modified Orca won't work with Firefox, OpenOffice.org, and
> Gnome/GTK+. That would seem more like a fork than a port ("FOrca" ?).
Its my intention for the Orca bonobo/ORBit and D-Bus code to be loadable
modules. Both the bonobo/ORBit module and the D-Bus module could be loaded
simultaneously, or singly at user's option. If a KDE user wants Firefox,
OpenOffice.org or Gnome/GTK+ apps to work with Orca, then they would load
both modules. A Gnome user who doesn't care about KDE apps would load only
the bonobo/ORBit module. So I don't see any need to talk about a "fork" of
Even if I can't get both modules to work simultaneously (either/or), at least
KDE will gain a screen reader and KDE developers can work on making their
applications more accessible.
I fully admit this is not a "full up" solution that unifies the two desktops.
Assuming I can get my project to a working state, I would expect it to be
replaced later with the "full up" solution, whenever and whatever that might
If nothing else, my efforts will identify the issues that need to be
addressed. What will the performance via D-Bus be like, for instance? How
to solve the problem of object lifetime? Something that is becoming very
apparent to me right now is that the Registry is going to be a serious
obstacle to unifying the two desktops -- something I was not aware of prior
to beginning this project.
Gary Cramblitt (aka PhantomsDad)
More information about the Accessibility