Skip to content

v0.6.0 — geometry refs, no more walk fallback

Choose a tag to compare

@javimosch javimosch released this 11 Aug 18:46
· 7 commits to main since this release

The collection+walk fallback is gone. Every collection match is now addressable, so reads never need a tree walk to complete an answer.

What the fallback actually was

v0.5 fell back to a full walk whenever a match could not be pathed — 14 of 37 elements in gnome-control-center. Diagnosing it found something more interesting than an identity bug: broken parent/child reciprocity.

NODE   filler '' [472,112 578x100]
parent panel  '' [472,112 578x100]  children=1  index_in_parent=-1
  -> pointer match: -1 | role+name+extents match: -1

The node's get_parent() returns a container that does not list it among its children — by pointer, by index, or by role+name+extents. A child-index path to such a node is impossible, not merely unknown. No better identity test could have fixed it (and v0.3 already tried one, atspi_accessible_get_id, which produced wrong refs).

Geometry refs

Those nodes now get a second ref kind:

app:@<roleId>~<x>,<y>,<w>,<h>#<fingerprint>

Resolved with a collection query for that role, matched on exact extents, and verified by the same role+name fingerprint. A rectangle with no match returns exit 84; two widgets sharing a role and rectangle are refused as ambiguous rather than guessed. ref_kind on every element says path or geometry.

Verified: all 14 geometry refs in gnome-control-center resolve to the widget they describe, and act through one drives the app correctly.

Caveat: a geometry ref is tied to screen position, so moving or resizing the window invalidates it — exit 84, never a wrong hit. Re-read state after a move.

Results

app method default --walk geometry refs
gnome-calculator collection 15 ms 65 ms 0
gnome-text-editor collection 12 ms 53 ms 0
gnome-control-center collection 25 ms 44 ms 14

All three return the same element set as the walk, with every ref usable. gnome-control-center was 76 ms via the old fallback.

Install

curl -L -o linux-use https://github.com/javimosch/linux-use/releases/download/v0.6.0/linux-use-v0.6.0-x86_64-linux
chmod +x linux-use && sudo mv linux-use /usr/local/bin/
sudo apt install libatspi2.0-0 libxtst6 libx11-6 libglib2.0-0
gsettings set org.gnome.desktop.interface toolkit-accessibility true
linux-use doctor && linux-use guide

sha256: 9c5ec79dd9ecd820eb504b86f0818d315d81b54c806058def7339442be2c66e7

Docs: https://javimosch.github.io/linux-use/

Full Changelog: v0.5.0...v0.6.0