[Kde-accessibility] focus tracking
Thomas Lübking
thomas.luebking at web.de
Tue Jul 6 22:55:28 BST 2010
Not questioning orcas (assumed?) heuristics, but QApplication has a
focusChanged( QWidget * old, QWidget * now) SIGNAL as well as focusWidget()
So there should be no need for guessing around on the Qt side.
KApplication could simply bind the SIGNAL to a SLOT setting the focus widget
area on some magnification server.
(And with a little smartness, calculate the exact position for some standard
widgets like line- or textedits, maybe one can have a dynamic property used by
eg. kate/konsole parts to support this)
Thomas
Am Tuesday 06 July 2010 schrieb Joseph Scheuhammer:
> Hi all,
>
> On 01/07/10 3:53 PM, Jos Poortvliet wrote:
> > Ok, thanks all for the responses. A couple of questions if you don't
> > mind, to check I understand this properly: - AT-SPI does not have a way
> > of tracking focus for magnification purposes? - So Gnome-Mag has
> > developed an API for this, but it's currently CORBA based and thus needs
> > changing - apps need to support this API for magnification to properly
> > work
>
> Here is my understanding.
>
> AT-SPI has a way of tracking focus, yes, but not specifically for
> magnification. There are focus events that can be listened for, and, I
> believe, one can use AT-SPI to query where focus is. The result is
> sometimes in terms of a GTK+ widget, in the sense that AT-SPI tells you
> that a specific widget has keyboard focus.
>
> Gnome-mag has not developed an API for focus tracking per se. Gnome-mag
> *is* a CORBA service, and is being ported to a DBus service. All
> services have an API so that other processes can make use of them. One
> of the functions the magnifier service provides is along the lines of
> "given these screen coordinates, place the centre of the magnified view
> at that point". By itself, this function doesn't know anything about
> focus. However, something that does know where focus is can determine
> the relevant coordinates and tell the magnifier where to place its
> view. (Aside: gs-mag also implements the same DBus service).
>
> What is the something that knows where focus is? As far as I know, the
> only application that computes this is Orca.
>
> And now for some historical background: when I started the
> implementation of a magnifier within GnomeShell, my intent was to use
> AT-SPI to track keyboard focus, and have the magnifier update its view
> accordingly. I proposed this to Will Walker, the lead Orca developer at
>
> the time. His response was (my emphasis):
> > So, we could deep dive on this whole thing and duplicate what Orca is
> > doing in Python to track the notion of "focus", but in Javascript,
> > requiring you to learn a whole new technology, a whole new API, and
> > *re-solve all the same problems Orca has solved*. Or, you could
> > expose a simple API, which will be needed anyway, and let Orca do the
> > driving. ;-)
>
> In other words, Orca is tracking keyboard focus. Furthermore, my
> impression is that Orca is doing something above and beyond what AT-SPI
> provides; that Orca uses a host of heuristics for focus tracking.
> What's happening is a sequence like this:
>
> 1. User moves keyboard focus.
> 2. Orca uses AT-SPI and Orca's own built-in heuristics to determine the
> region on screen that contains the focussed element.
> 3. Orca instructs the magnifier service to update its view given the
> coordinates of that region.
>
> In summary, the magnifier is pretty dumb when it comes to keyboard
> focus. The genius here is Orca.
>
> In closing, here is something of a proposal: the machinery that Orca
> uses to track keyboard focus is not inherent to a screen reader. Other
> processes could well make use of Orca's focus tracking machinery. It
> would be very useful if these heuristics could be carved out of Orca and
> published as a separate module, library, or service that any process
> could make use of.
>
> Hope that helps.
More information about the kde-core-devel
mailing list