Re: Understanding the AT-SPI D-BUS protocol

Mike Gorse via gnome-accessibility-list <[email protected]> Sun, 16 May 2021 12:55:45 -0500 (CDT)
Newsgroups gmane.comp.gnome.accessibility.general
Message-ID <[email protected]>
Hi Yann,

I'm sorry for the delay in responding--I didn't notice your email until 
now.

> Is there any doc/spec somewhere that would document the whole AT-SPI
> protocol in terms of D-BUS, and who's expecting to send/receive what ?

Yeah, it isn't very well documented, and it would be good to have a 
specification written out, but then that begs the question of whether the 
interface should stay as it is; I think that some of the gtk developers 
wouldn't mind trying to simplify it. Some things are more or less the way 
they are for historical reasons (ie, all events having two ints, whether 
the particular event uses them or not).

> I'm particularly interested in the org.a11y.atspi.Event.Object
> interface, and I have only gathered inconsistent data for now, eg.
> for the ChildrenChanged signal:
>
> * the interface is not exposed to the D-BUS Introspection API, so we need
>  to find in another place the metadata to make sense out of it
> * the XML, whether in at-spi-core2 or gtk4 trees, declares a signature
>  or "(suuv)"

Oh, I'd consider that a bug--I'll want to clean that up for 2.42. It isn't 
what the code in libatspi is expecting.

> * a gtk2/gtk3 the desktop (org.a11y.atspi.Registry /org/a11y/atspi/accessible/root)
>  emits ChildrenChanged with signature "siiv(so)", the "(so)" part refering to the
>  desktop
> * a gtk2/gtk3 non-desktop org.a11y.atspi.Accessible emits ChildrenChanged
>  with signature "siiva{sv}", with the "a{sv}" part usually empty.  What can
>  we expect to find there ?

The siiv(so) was the original signature. The (so) was intended to specify 
the application (with a dbus address and object path), but in reality it 
always contained the root object, so it seemed superfluous and was mainly 
left over from the old CORBA implementation. A while back, I replaced it 
with the a{sv} that you're seeing, but it looks as though I forgot to 
update the code in the registry daemon. The libatspi code will handle 
either signature for backwards compatibility. I meant for the a{sv} to 
allow for properties to be sent along with the event for caching purposes, 
but it isn't really being used for anything.

> * in Qt there is some code to emit ChildrenChanged, but it looks like it
>  was never called in any version.  I've started to work on a patch to
>  activate this, and notice the existing code emits the "siiv(so)" version.
> * in gtk4 the code, having migrated from atk, is simpler and is there,
>  but it seems not to trigger.

Thanks for working on the qt code. The gtk 4 code is new and might still 
be being worked on.

Anyway, I'm sorry for the trouble, and it looks as though you've found a 
few bugs in AT-SPI.

Hth,
-Mike