Skip to content

Release: native-UI control depth — control_patterns / ax_text / ax_tree_walk / focus_order (v181–v184)#401

Merged
JE-Chen merged 9 commits into
mainfrom
dev
Jun 24, 2026
Merged

Release: native-UI control depth — control_patterns / ax_text / ax_tree_walk / focus_order (v181–v184)#401
JE-Chen merged 9 commits into
mainfrom
dev

Conversation

@JE-Chen

@JE-Chen JE-Chen commented Jun 24, 2026

Copy link
Copy Markdown
Member

Release: native-UI control depth (v181–v184)

Bundles the completed native-UI HIGH lane — four features deepening UI Automation control coverage, each merged to dev CI-green (Codacy 0 / SonarCloud OK / all matrices + Docker).

All four share the injectable accessibility.backends.get_backend() seam (headless-testable via fake backends; real UIA calls in the Windows backend) and stay Qt-free. The pure post-processors reuse existing helpers (element_parse.reading_order, ax_tree_walk.humanize_role) rather than duplicating logic. EN/Zh docs (v181–v184) + WHATS_NEW entries included.

JE-Chen added 9 commits June 24, 2026 08:21
The accessibility backend had only Value/Invoke/Toggle/Grid-read, so treeviews,
listboxes/combos, sliders and off-screen rows had no native pattern path. Add
ExpandCollapse / SelectionItem / RangeValue / ScrollItem actions on top of the
existing backend ABC, dispatched through the injectable get_backend() seam
(headless-testable via a fake backend; real UIA calls in the Windows backend).
The test's _FakeBackend overrode pattern methods with **kw instead of the
explicit name/role/app_name/automation_id signature, which Codacy/Pylint flags
as arguments-differ. Use the same signatures as AccessibilityBackend.
…erns-batch

Add control_patterns: extended UIA patterns (Expand/Select/Range/Scroll)
ValuePattern returns empty on multiline edits, RichEdit and document
controls, so control_get_value can't read exactly the controls whose
text matters most. Read through UIA TextPattern instead: full document,
current selection, and visible-only text. Dispatched via the injectable
accessibility backend seam so the core is headless-testable; real UIA
calls live in the Windows backend.
Add ax_text: native TextPattern reads (document / selection / visible)
dump_accessibility_tree emits the platform's raw role (on Windows the
bare UIA ControlType id, e.g. ControlType_50000) and a serialised dump
carries no stable per-node identity. Add the pure post-processing it
lacks: a ControlType-id to friendly-name table, whole-tree role
humanization, a stable positional path per node (a pure stand-in for
RuntimeId), and path resolution. AC_walk_tree is the readable
counterpart to AC_a11y_dump.
…-batch

Add ax_tree_walk: readable roles + addressable node paths for a11y dumps
Nothing reasoned about keyboard navigation — only mouse coordinates and
element values. Add the keyboard layer: tab_order returns focusable
elements in the order Tab visits them (reading order), audit_focus_order
is a WCAG 2.4.x report flagging problems like zero-area focusable
elements, and focus_control sets keyboard focus via UIA SetFocus. The
pure parts reuse element_parse.reading_order and ax_tree_walk.humanize_role;
focus_control dispatches the injectable backend seam.
…batch

Add focus_order: keyboard tab sequence, WCAG focus-order audit, set-focus
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 168 complexity · 0 duplication

Metric Results
Complexity 168
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@JE-Chen JE-Chen merged commit 4b0bc15 into main Jun 24, 2026
31 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant