Re: Adventures in calling Atspi from JavaScript



On 07/17/2012 11:00 PM, Joseph Scheuhammer wrote:
> All,
>
> I've been implementing a JavaScript object for use within GNOME Shell
> that tracks the keyboard focus and the caret. I am using
> GObjectIntrospection to communicate between JavaScript and AT-SPI.
> Some things are working, but others aren't. Descriptions of the
> problems are given below. If you see anything that sheds light on
> things, let me know.
>
> 1. Registering 'object:text-caret-moved' always results in an error.

Hmm, this is odd (1)

>
> The actual error is garbled, containing non-printable characters. Here
> is what I get:
>
> > Window manager warning: Log level 16: Atspi: Adding match: Interface
> name
> > 'org.a11y.atspi.Event.object' is invalid.
>
> How it's registered. Note that 'this._atspiEventListener' is an
> Atspi.EventListener, or, in C, an AtspiEventListener:
>
> registered = this._atspiEventListener.register_from_callback(
> _atspiCaretCB, 'object:text-caret-moved'
> );
>
> - the returned value, 'registered', is 'true'.
> - the callback, '_atspiCaretCB', is never called.
> - I do the same thing for 'object:state-changed:focused' and
> 'object:state-changed:selected', and that works fine.
>
> 2. Focus tracking doesn't work with St widgets.
>
> Registering for 'object:state-changed:focused' and
> 'object:state-changed:selected' works great with GTK widgets, and even
> within web pages with ARIA widgets. But, whenever a GNOME Shell widget
> is invoked, the system freezes for about 5 - 10 seconds. When the UI
> is responsive again, the event passed back, has no accessible
> component within it.

This is odd (2).

Because AFAIK, python based tools, like accerciser can do (1) and (2)
without problems. Joanmarie, Javier H. could you confirm that?

>
> > Window manager warning: Log level 16: AT-SPI: Error in GetItems,
> > sender=(null), error=Did not receive a reply. Possible causes
> include: the
> > remote application did not send a reply, the message bus security
> policy
> > blocked the reply, the reply timeout expired, or the network
> connection was
> > broken.

I already saw those warning, but as stuff were working I didn't take too
much attention. It seems that was an error ...
>
> 3. Deregistering callbacks doesn't actually deregister.
>
> Or, I don't understand what "deregister" means :-).
>
> When deregister_from_callback() is called, the return value is 'true',
> suggesting that the event has been deregistered. However, the callback
> that was supplied during the prior register_from_callback() is still
> invoked. It's as if the system is saying, "Okay, you've been
> disconnected as requested", but nonetheless keeps calling back when
> the event occurs.
>
> The way it's deregistered:
> deregistered = this._atspiEventListener.deregister_from_callback(
> _atspiFocusCB, 'object:state-changed:focused'
> );
>
> - the returned value, deregistered, is 'true'
> - the callback, _atspiFocusCB, continues to be called.
>
>

Is Alejandro Leiva using 1) 2) and 3) and working? In the same way, I
think that your work started with a python prototype written by
Joanmarie. Were that prototype using 1) 2) and 3)?

Askingh all this but in a different way, is all this stuff working fine
on C and python but failing on Javascript?

BR

-- 
Alejandro Piñeiro Iglesias



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