Add WCAG 2.2 AAA compliance and automated AT-SPI audit tool

- Bring all UI widgets to WCAG 2.2 AAA conformance across all views
- Add accessible labels, roles, descriptions, and announcements
- Bump focus outlines to 3px, target sizes to 44px AAA minimum
- Fix announce()/announce_result() to walk widget tree via parent()
- Add AT-SPI accessibility audit script (tools/a11y-audit.py) that
  checks SC 4.1.2, 1.1.1, 1.3.1, 2.1.1, 2.5.5, 2.5.8, 2.4.8,
  2.4.9, 2.4.10, 2.1.3 with JSON report output for CI
- Clean up project structure, archive old plan documents
This commit is contained in:
lashman
2026-03-01 12:44:21 +02:00
parent abb69dc753
commit 7e55d5796f
23 changed files with 2758 additions and 472 deletions

View File

@@ -57,6 +57,7 @@ pub fn show_integration_dialog(
.pixel_size(32)
.build();
image.set_paintable(Some(&texture));
image.update_property(&[gtk::accessible::Property::Label(name)]);
name_row.add_prefix(&image);
}
}
@@ -88,6 +89,7 @@ pub fn show_integration_dialog(
.build();
let check1 = gtk::Image::from_icon_name("emblem-ok-symbolic");
check1.set_valign(gtk::Align::Center);
check1.set_accessible_role(gtk::AccessibleRole::Presentation);
desktop_row.add_prefix(&check1);
actions_box.append(&desktop_row);
@@ -97,6 +99,7 @@ pub fn show_integration_dialog(
.build();
let check2 = gtk::Image::from_icon_name("emblem-ok-symbolic");
check2.set_valign(gtk::Align::Center);
check2.set_accessible_role(gtk::AccessibleRole::Presentation);
icon_row.add_prefix(&check2);
actions_box.append(&icon_row);
@@ -156,6 +159,7 @@ pub fn show_integration_dialog(
.build();
let warning_icon = gtk::Image::from_icon_name("dialog-warning-symbolic");
warning_icon.set_pixel_size(16);
warning_icon.set_accessible_role(gtk::AccessibleRole::Presentation);
warning_header.append(&warning_icon);
let warning_title = gtk::Label::builder()
.label(&i18n("Compatibility Notes"))
@@ -168,6 +172,9 @@ pub fn show_integration_dialog(
let compat_list = gtk::ListBox::new();
compat_list.add_css_class("boxed-list");
compat_list.set_selection_mode(gtk::SelectionMode::None);
compat_list.update_property(&[
gtk::accessible::Property::Label(&i18n("Compatibility warnings")),
]);
for (title, subtitle, badge_text) in &warnings {
let row = adw::ActionRow::builder()