Accessibility: a set-value request without a number leaves a dialog slider as it is

This commit is contained in:
dotCooCoo
2026-11-04 21:37:57 +07:00
committed by bflatastic
parent 07e598c636
commit c743662add
2 changed files with 7 additions and 8 deletions
+3
View File
@@ -2056,6 +2056,9 @@ fn screen_readers_set_a_dialog_slider_number() {
assert_eq!(angle(&app), -90.0, "not a number");
f.run(&mut app, vec![set(30.0), set(f64::INFINITY)]);
assert_eq!(angle(&app), -90.0, "the last request is not a finite number");
let empty = ActionRequest { action: Action::SetValue, target_node: node, target_tree: TreeId::ROOT, data: None };
f.run(&mut app, vec![set(30.0), egui::Event::AccessKitActionRequest(empty)]);
assert_eq!(angle(&app), -90.0, "the last request has no number");
// A field past its rail's end extends the range screen readers get, and a set value can go
// that far: Transform Each's Horizontal Scale at 300% on a rail that ends at 200%.
app.ui.dialog = None;
+4 -8
View File
@@ -249,14 +249,10 @@ fn rail_step(ui: &Ui, id: egui::Id, focused: bool, s: &SliderValue) -> Option<f6
let n = i.num_accesskit_action_requests(id, Action::Increment) as f64 - i.num_accesskit_action_requests(id, Action::Decrement) as f64;
v = by(v, n).clamp(lo, hi);
// The last set-value request this frame.
let set = i
.accesskit_action_requests(id, Action::SetValue)
.filter_map(|request| match request.data {
Some(ActionData::NumericValue(value)) => Some(value),
_ => None,
})
.last()
.filter(|value| value.is_finite());
let set = i.accesskit_action_requests(id, Action::SetValue).last().and_then(|request| match request.data {
Some(ActionData::NumericValue(value)) if value.is_finite() => Some(value),
_ => None,
});
if let Some(value) = set {
// The number the field would show, as `SliderValue::field` reads it.
let shown = s.decimals.map_or(value, |d| field_text(value, "", d).parse().unwrap_or(value));