Focus-caret tracking in GNOME Shell 3.9.x

In earlier versions of GNOME, the GNOME Shell magnifier had been relying upon on the Orca screen reader to track the current keyboard focus, scrolling the view of the magnified content to include the focused UI element or caret position. This would be acceptable for the very few users who require both a screen reader and screen magnifier simultaneously. However, for the majority of magnifier users, who want to use only a magnifier, it is overkill to launch a screen reader as well. The GNOME Shell magnifier should have its own caret and focus tracking mechanism, as is done on other platforms.


Joseph Scheuhammer, Magdalen Berns

Involved Parties

GNOME Shell team, gsettings-desktop-schemas maintainers (for different modes of focus-tracking), gnome-control-center (for providing UI for focus-tracking preferences), a11y team

Current Status

September 7 2013

Focus and caret tracking has been pushed to GNOME Shell master.

September 5, 2013

Merged !

June 18 2013

  • The project was accepted for the Google Summer of Code (GSoC) at GNOME.
  • Reentrancy problems on gnome-shell has been solved.

  • Magdalen Berns has updated Joseph Scheuhammer's patch and 'cleaned it up'
  • During 2013 GSoC see implement caret and focus tracking for GnomeShell for more updates.

  • gsettings for different modes of tracking the mouse within the magnified view (centered, proportional, or push) are already implemented.

Sep 5, 2012

Prototype JavaScript has been implemented. The "FocusCaretTracker" object runs within GNOME Shell, and makes use of AT-SPI's event system.

The tracker receives notifications of focus and caret events from AT-SPI, and relays them to any interested party. It does the latter using gjs's signal system (signal.js).

However, there is a problem with focus and caret events when generated from within GNOME Shell itself; for example, from an St widget. In that case, there is an apparent UI freeze, but the system is again responsive 5 - 10 seconds later. Also, after the freeze, the event object sent back from AT-SPI is incomplete.

If the FocusCaretTracker code is run outside of GNOME Shell in a separate GJS process, the problem does not occur.

From 3.4 features page.


Next steps

  • Add UI for users to control the focus-tracking and caret-tracking modes.


  • (./) 681276 Reentrancy problems on gnome-shell

  • (./) 705652 Add GSettings for focus and caret tracking in GNOME Shell

  • (./) 647074 GNOME Shell Magnifier should track focus and the caret

ThreePointNine/Features/FocusCaretTracking (last edited 2013-09-07 21:48:14 by MagdalenBerns)