From 24ac9e193d7db059ebe653e5a043df70b1219706 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 22 Dec 2025 21:25:12 +0100 Subject: [PATCH] Make scroll bars and resize splitters visible to accesskit (#7804) --- crates/egui/src/containers/scroll_area.rs | 5 ++++- crates/egui/src/containers/window.rs | 3 +++ crates/egui/src/data/output.rs | 2 ++ crates/egui/src/lib.rs | 4 ++++ crates/egui/src/response.rs | 4 ++++ 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/egui/src/containers/scroll_area.rs b/crates/egui/src/containers/scroll_area.rs index aa084f650..afe1239c7 100644 --- a/crates/egui/src/containers/scroll_area.rs +++ b/crates/egui/src/containers/scroll_area.rs @@ -9,7 +9,8 @@ use epaint::Margin; use crate::{ Context, CursorIcon, Id, NumExt as _, Pos2, Rangef, Rect, Response, Sense, Ui, UiBuilder, - UiKind, UiStackInfo, Vec2, Vec2b, emath, epaint, lerp, pass_state, pos2, remap, remap_clamp, + UiKind, UiStackInfo, Vec2, Vec2b, WidgetInfo, emath, epaint, lerp, pass_state, pos2, remap, + remap_clamp, }; #[derive(Clone, Copy, Debug)] @@ -1286,6 +1287,8 @@ impl Prepared { // Also: it make sense to detect any hover where the scroll bar _will_ be. let response = ui.interact(max_bar_rect, interact_id, sense); + response.widget_info(|| WidgetInfo::new(crate::WidgetType::ScrollBar)); + // top/bottom of a horizontal scroll (d==0). // left/rigth of a vertical scroll (d==1). let cross = if scroll_style.floating { diff --git a/crates/egui/src/containers/window.rs b/crates/egui/src/containers/window.rs index 411527272..21aa24ac2 100644 --- a/crates/egui/src/containers/window.rs +++ b/crates/egui/src/containers/window.rs @@ -959,6 +959,9 @@ fn resize_interaction( }, true, ); + + response.widget_info(|| WidgetInfo::new(crate::WidgetType::ResizeHandle)); + SideResponse { hover: response.hovered(), drag: response.dragged(), diff --git a/crates/egui/src/data/output.rs b/crates/egui/src/data/output.rs index 2c6edba84..2d2c74430 100644 --- a/crates/egui/src/data/output.rs +++ b/crates/egui/src/data/output.rs @@ -679,6 +679,8 @@ impl WidgetInfo { WidgetType::Panel => "panel", WidgetType::ProgressIndicator => "progress indicator", WidgetType::Window => "window", + WidgetType::ScrollBar => "scroll bar", + WidgetType::ResizeHandle => "resize handle", WidgetType::Label | WidgetType::Other => "", }; diff --git a/crates/egui/src/lib.rs b/crates/egui/src/lib.rs index 794411bc8..6719c7415 100644 --- a/crates/egui/src/lib.rs +++ b/crates/egui/src/lib.rs @@ -663,6 +663,10 @@ pub enum WidgetType { Window, + ResizeHandle, + + ScrollBar, + /// If you cannot fit any of the above slots. /// /// If this is something you think should be added, file an issue. diff --git a/crates/egui/src/response.rs b/crates/egui/src/response.rs index 3e3ef73a7..bdc1727ca 100644 --- a/crates/egui/src/response.rs +++ b/crates/egui/src/response.rs @@ -871,6 +871,10 @@ impl Response { WidgetType::Panel => Role::Pane, WidgetType::ProgressIndicator => Role::ProgressIndicator, WidgetType::Window => Role::Window, + + WidgetType::ResizeHandle => Role::Splitter, + WidgetType::ScrollBar => Role::ScrollBar, + WidgetType::Other => Role::Unknown, }); if !info.enabled {