From 8eb50c2b2d35e6d3269ac2bce5d782f9be1d0ddd Mon Sep 17 00:00:00 2001 From: Delan Azabani Date: Tue, 23 Dec 2025 16:55:02 +0800 Subject: [PATCH] Update accesskit to 0.24.0 (and related deps) Co-authored-by: Luke Warlow --- Cargo.lock | 202 +++++++++++------- Cargo.toml | 6 +- crates/egui-winit/src/lib.rs | 2 +- crates/egui/src/context.rs | 1 + crates/egui/src/id.rs | 2 +- crates/egui/src/input_state/mod.rs | 6 +- crates/egui/src/memory/mod.rs | 6 +- .../egui/src/text_selection/accesskit_text.rs | 2 +- .../egui/src/text_selection/cursor_range.rs | 7 +- .../src/accessibility_inspector.rs | 6 +- crates/egui_kittest/src/node.rs | 21 +- 11 files changed, 166 insertions(+), 95 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a99c0d281..31e91a65d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,22 +23,28 @@ name = "accesskit" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99" + +[[package]] +name = "accesskit" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5351dcebb14b579ccab05f288596b2ae097005be7ee50a7c3d4ca9d0d5a66f6a" dependencies = [ "enumn", "serde", + "uuid", ] [[package]] name = "accesskit_atspi_common" -version = "0.14.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f73a9b855b6f4af4962a94553ef0c092b80cf5e17038724d5e30945d036f69" +checksum = "d5469156abf83b372574df59b660375739725f7b5a3c78dc47b80f9ec0450c43" dependencies = [ - "accesskit", - "accesskit_consumer", + "accesskit 0.24.0", + "accesskit_consumer 0.34.0", "atspi-common", "serde", - "thiserror 1.0.66", "zvariant", ] @@ -48,19 +54,29 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdd06f5fea9819250fffd4debf926709f3593ac22f8c1541a2573e5ee0ca01cd" dependencies = [ - "accesskit", + "accesskit 0.21.1", "hashbrown 0.15.2", ] [[package]] -name = "accesskit_macos" -version = "0.22.1" +name = "accesskit_consumer" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fbaf15815f39084e0cb24950c232f0e3634702c2dfbf182ae3b4919a4a1d45" +checksum = "a191faf9cb278127e253ba80af4c588527b7b9d824c58220aca00bb162a5a460" dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown 0.15.2", + "accesskit 0.24.0", + "hashbrown 0.16.0", +] + +[[package]] +name = "accesskit_macos" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dceb1d10a043047187e8fc6f4f11e02ab0ed3f8b5848c10cf19fc1e2191e0c2" +dependencies = [ + "accesskit 0.24.0", + "accesskit_consumer 0.34.0", + "hashbrown 0.16.0", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", @@ -68,11 +84,11 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.17.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64926a930368d52d95422b822ede15014c04536cabaa2394f99567a1f4788dc6" +checksum = "14984a017441d2efc3b0fb6a08ef9b83c17719479ba72f1f0c6e08bea9dd92ec" dependencies = [ - "accesskit", + "accesskit 0.24.0", "accesskit_atspi_common", "async-channel", "async-executor", @@ -86,25 +102,25 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.29.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "792991159fa9ba57459de59e12e918bb90c5346fea7d40ac1a11f8632b41e63a" +checksum = "4983e64eb7e317c7d8f6348363d24f955bed51c0216ad67c19857c2b8605e576" dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown 0.15.2", + "accesskit 0.24.0", + "accesskit_consumer 0.34.0", + "hashbrown 0.16.0", "static_assertions", - "windows 0.61.1", - "windows-core 0.61.0", + "windows 0.62.2", + "windows-core 0.62.2", ] [[package]] name = "accesskit_winit" -version = "0.29.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9db0ea66997e3f4eae4a5f2c6b6486cf206642639ee629dbbb860ace1dec87" +checksum = "e0e50a8f04c92b70e53ebfc6e64714de99e5deb0db092ea7de3b5aa8fceedcca" dependencies = [ - "accesskit", + "accesskit 0.24.0", "accesskit_macos", "accesskit_unix", "accesskit_windows", @@ -496,20 +512,19 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atspi" -version = "0.25.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c" +checksum = "c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d" dependencies = [ "atspi-common", - "atspi-connection", "atspi-proxies", ] [[package]] name = "atspi-common" -version = "0.9.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb" +checksum = "20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d" dependencies = [ "enumflags2", "serde", @@ -521,23 +536,11 @@ dependencies = [ "zvariant", ] -[[package]] -name = "atspi-connection" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938" -dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite", - "zbus", -] - [[package]] name = "atspi-proxies" -version = "0.9.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c" +checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc" dependencies = [ "atspi-common", "serde", @@ -1310,7 +1313,7 @@ dependencies = [ name = "egui" version = "0.33.3" dependencies = [ - "accesskit", + "accesskit 0.24.0", "ahash", "backtrace", "bitflags 2.9.4", @@ -1371,8 +1374,8 @@ dependencies = [ name = "egui_demo_app" version = "0.33.3" dependencies = [ - "accesskit", - "accesskit_consumer", + "accesskit 0.24.0", + "accesskit_consumer 0.34.0", "bytemuck", "chrono", "eframe", @@ -2551,8 +2554,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01fd6dd2cce251a360101038acb9334e3a50cd38cd02fefddbf28aa975f043c8" dependencies = [ - "accesskit", - "accesskit_consumer", + "accesskit 0.21.1", + "accesskit_consumer 0.30.1", "parking_lot", ] @@ -4857,6 +4860,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +dependencies = [ + "serde_core", +] + [[package]] name = "vello_common" version = "0.0.4" @@ -5347,24 +5359,23 @@ dependencies = [ [[package]] name = "windows" -version = "0.61.1" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ "windows-collections", - "windows-core 0.61.0", + "windows-core 0.62.2", "windows-future", - "windows-link 0.1.3", "windows-numerics", ] [[package]] name = "windows-collections" -version = "0.2.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core 0.61.0", + "windows-core 0.62.2", ] [[package]] @@ -5386,21 +5397,35 @@ version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.2", "windows-strings 0.4.0", ] [[package]] -name = "windows-future" -version = "0.2.0" +name = "windows-core" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-core 0.61.0", - "windows-link 0.1.3", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading", ] [[package]] @@ -5416,9 +5441,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -5438,9 +5463,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -5461,12 +5486,12 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core 0.61.0", - "windows-link 0.1.3", + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -5487,6 +5512,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-strings" version = "0.1.0" @@ -5506,6 +5540,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -5599,6 +5642,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -5967,9 +6019,9 @@ dependencies = [ [[package]] name = "zbus-lockstep" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a22426b1bc2aca91de97772506f0655fa373448e6010d79d5d5880915c388409" +checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863" dependencies = [ "zbus_xml", "zvariant", @@ -5977,9 +6029,9 @@ dependencies = [ [[package]] name = "zbus-lockstep-macros" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "100ffec29ed51859052f4563061abe35557acb56ba574510571f8398efc70a29" +checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 470644bb4..2d2bfee41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,9 +68,9 @@ egui_glow = { version = "0.33.3", path = "crates/egui_glow", default-features = egui_kittest = { version = "0.33.3", path = "crates/egui_kittest", default-features = false } eframe = { version = "0.33.3", path = "crates/eframe", default-features = false } -accesskit = "0.21.1" -accesskit_consumer = "0.30.1" -accesskit_winit = "0.29.1" +accesskit = "0.24.0" +accesskit_consumer = "0.34.0" +accesskit_winit = "0.32.0" ahash = { version = "0.8.12", default-features = false, features = [ "no-rng", # we don't need DOS-protection, so we let users opt-in to it instead "std", diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs index 54059cbd6..56c62dc52 100644 --- a/crates/egui-winit/src/lib.rs +++ b/crates/egui-winit/src/lib.rs @@ -102,7 +102,7 @@ pub struct State { has_sent_ime_enabled: bool, #[cfg(feature = "accesskit")] - accesskit: Option, + pub accesskit: Option, allow_ime: bool, ime_rect_px: Option, diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index e28048edf..55b38e3b4 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -2616,6 +2616,7 @@ impl ContextImpl { platform_output.accesskit_update = Some(accesskit::TreeUpdate { nodes, tree: Some(accesskit::Tree::new(root_id)), + tree_id: accesskit::TreeId::ROOT, focus: focus_id, }); } diff --git a/crates/egui/src/id.rs b/crates/egui/src/id.rs index 7484930c8..661bdf2bf 100644 --- a/crates/egui/src/id.rs +++ b/crates/egui/src/id.rs @@ -79,7 +79,7 @@ impl Id { self.0.get() } - pub(crate) fn accesskit_id(&self) -> accesskit::NodeId { + pub fn accesskit_id(&self) -> accesskit::NodeId { self.value().into() } diff --git a/crates/egui/src/input_state/mod.rs b/crates/egui/src/input_state/mod.rs index 49027c06e..b90cd5031 100644 --- a/crates/egui/src/input_state/mod.rs +++ b/crates/egui/src/input_state/mod.rs @@ -865,7 +865,8 @@ impl InputState { let accesskit_id = id.accesskit_id(); self.events.iter().filter_map(move |event| { if let Event::AccessKitActionRequest(request) = event - && request.target == accesskit_id + && request.target_node == accesskit_id + && request.target_tree == accesskit::TreeId::ROOT && request.action == action { return Some(request); @@ -882,7 +883,8 @@ impl InputState { let accesskit_id = id.accesskit_id(); self.events.retain(|event| { if let Event::AccessKitActionRequest(request) = event - && request.target == accesskit_id + && request.target_node == accesskit_id + && request.target_tree == accesskit::TreeId::ROOT { return !consume(request); } diff --git a/crates/egui/src/memory/mod.rs b/crates/egui/src/memory/mod.rs index 9c91c1322..6695816cb 100644 --- a/crates/egui/src/memory/mod.rs +++ b/crates/egui/src/memory/mod.rs @@ -567,11 +567,13 @@ impl Focus { if let crate::Event::AccessKitActionRequest(accesskit::ActionRequest { action: accesskit::Action::Focus, - target, + target_node, + target_tree, data: None, }) = event + && *target_tree == accesskit::TreeId::ROOT { - self.id_requested_by_accesskit = Some(*target); + self.id_requested_by_accesskit = Some(*target_node); } } } diff --git a/crates/egui/src/text_selection/accesskit_text.rs b/crates/egui/src/text_selection/accesskit_text.rs index 974a334d0..747c4ea25 100644 --- a/crates/egui/src/text_selection/accesskit_text.rs +++ b/crates/egui/src/text_selection/accesskit_text.rs @@ -94,7 +94,7 @@ pub fn update_accesskit_for_text_widget( builder.set_character_lengths(character_lengths); builder.set_character_positions(character_positions); builder.set_character_widths(character_widths); - builder.set_word_lengths(word_lengths); + // builder.set_word_lengths(word_lengths); }); } } diff --git a/crates/egui/src/text_selection/cursor_range.rs b/crates/egui/src/text_selection/cursor_range.rs index a816f5f26..2f231d8d3 100644 --- a/crates/egui/src/text_selection/cursor_range.rs +++ b/crates/egui/src/text_selection/cursor_range.rs @@ -192,10 +192,13 @@ impl CCursorRange { Event::AccessKitActionRequest(accesskit::ActionRequest { action: accesskit::Action::SetTextSelection, - target, + target_node, + target_tree, data: Some(accesskit::ActionData::SetTextSelection(selection)), }) => { - if _widget_id.accesskit_id() == *target { + if _widget_id.accesskit_id() == *target_node + && *target_tree == accesskit::TreeId::ROOT + { let primary = ccursor_from_accesskit_text_position(_widget_id, galley, &selection.focus); let secondary = diff --git a/crates/egui_demo_app/src/accessibility_inspector.rs b/crates/egui_demo_app/src/accessibility_inspector.rs index 138c05ede..ece8a8ead 100644 --- a/crates/egui_demo_app/src/accessibility_inspector.rs +++ b/crates/egui_demo_app/src/accessibility_inspector.rs @@ -175,7 +175,8 @@ impl AccessibilityInspectorPlugin { && ui.button(format!("{action:?}")).clicked() { let action_request = ActionRequest { - target: node.id(), + target_node: node.id(), + target_tree: accesskit::TreeId::ROOT, action, data: None, }; @@ -205,6 +206,9 @@ impl AccessibilityInspectorPlugin { // Safety: This is safe since the `accesskit::NodeId` was created from an `egui::Id`. #[expect(unsafe_code)] + // FIXME: accesskit_consumer::Node::id() returns a new type now + // + // let egui_node_id = unsafe { Id::from_high_entropy_bits(node.id().0) }; ui.push_id(node.id(), |ui| { diff --git a/crates/egui_kittest/src/node.rs b/crates/egui_kittest/src/node.rs index 94940ffff..35e3d09ca 100644 --- a/crates/egui_kittest/src/node.rs +++ b/crates/egui_kittest/src/node.rs @@ -100,7 +100,8 @@ impl Node<'_> { pub fn click_accesskit(&self) { self.event(egui::Event::AccessKitActionRequest( accesskit::ActionRequest { - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, action: accesskit::Action::Click, data: None, }, @@ -121,7 +122,8 @@ impl Node<'_> { pub fn focus(&self) { self.event(egui::Event::AccessKitActionRequest(ActionRequest { action: accesskit::Action::Focus, - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, data: None, })); } @@ -164,7 +166,8 @@ impl Node<'_> { pub fn scroll_to_me(&self) { self.event(egui::Event::AccessKitActionRequest(ActionRequest { action: accesskit::Action::ScrollIntoView, - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, data: None, })); } @@ -173,7 +176,8 @@ impl Node<'_> { pub fn scroll_down(&self) { self.event(egui::Event::AccessKitActionRequest(ActionRequest { action: accesskit::Action::ScrollDown, - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, data: None, })); } @@ -182,7 +186,8 @@ impl Node<'_> { pub fn scroll_up(&self) { self.event(egui::Event::AccessKitActionRequest(ActionRequest { action: accesskit::Action::ScrollUp, - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, data: None, })); } @@ -191,7 +196,8 @@ impl Node<'_> { pub fn scroll_left(&self) { self.event(egui::Event::AccessKitActionRequest(ActionRequest { action: accesskit::Action::ScrollLeft, - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, data: None, })); } @@ -200,7 +206,8 @@ impl Node<'_> { pub fn scroll_right(&self) { self.event(egui::Event::AccessKitActionRequest(ActionRequest { action: accesskit::Action::ScrollRight, - target: self.accesskit_node.id(), + target_node: self.accesskit_node.id(), + target_tree: accesskit::TreeId::ROOT, data: None, })); }