From c90904639863c98d91fcbb07ab0e6cbc851037ba Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 17 Sep 2025 11:14:07 +0300 Subject: [PATCH 1/7] update objc2 crates --- Cargo.lock | 250 +++++++++++++++++++++++++------- platforms/macos/Cargo.toml | 6 +- platforms/macos/src/adapter.rs | 24 +-- platforms/macos/src/context.rs | 15 +- platforms/macos/src/event.rs | 6 +- platforms/macos/src/node.rs | 213 +++++++++++++-------------- platforms/macos/src/patch.rs | 22 ++- platforms/macos/src/subclass.rs | 56 ++++--- 8 files changed, 361 insertions(+), 231 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a09c2dd1f..6ce24b2f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,9 +65,9 @@ dependencies = [ "accesskit", "accesskit_consumer", "hashbrown", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.6.2", + "objc2-app-kit 0.3.1", + "objc2-foundation 0.3.1", ] [[package]] @@ -429,7 +429,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "block2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" +dependencies = [ + "objc2 0.6.2", ] [[package]] @@ -596,6 +605,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.8.0", + "objc2 0.6.2", +] + [[package]] name = "dlib" version = "0.5.2" @@ -1121,6 +1140,15 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" @@ -1128,13 +1156,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ "bitflags 2.8.0", - "block2", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data 0.2.2", + "objc2-core-image 0.2.2", + "objc2-foundation 0.2.2", + "objc2-quartz-core 0.2.2", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" +dependencies = [ + "bitflags 2.8.0", + "block2 0.6.1", "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", + "objc2 0.6.2", + "objc2-cloud-kit 0.3.1", + "objc2-core-data 0.3.1", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image 0.3.1", + "objc2-foundation 0.3.1", + "objc2-quartz-core 0.3.1", ] [[package]] @@ -1144,10 +1191,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.8.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" +dependencies = [ + "bitflags 2.8.0", + "objc2 0.6.2", + "objc2-foundation 0.3.1", ] [[package]] @@ -1156,9 +1214,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1168,9 +1226,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.8.0", - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" +dependencies = [ + "bitflags 2.8.0", + "objc2 0.6.2", + "objc2-foundation 0.3.1", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +dependencies = [ + "bitflags 2.8.0", + "dispatch2", + "objc2 0.6.2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" +dependencies = [ + "bitflags 2.8.0", + "dispatch2", + "objc2 0.6.2", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] @@ -1179,22 +1272,32 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] +[[package]] +name = "objc2-core-image" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" +dependencies = [ + "objc2 0.6.2", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-core-location" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-contacts", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -1210,10 +1313,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.8.0", - "block2", + "block2 0.5.1", "dispatch", "libc", - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +dependencies = [ + "bitflags 2.8.0", + "block2 0.6.1", + "libc", + "objc2 0.6.2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" +dependencies = [ + "bitflags 2.8.0", + "objc2 0.6.2", + "objc2-core-foundation", ] [[package]] @@ -1222,10 +1349,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1235,9 +1362,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.8.0", - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1247,20 +1374,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.8.0", - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] +[[package]] +name = "objc2-quartz-core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" +dependencies = [ + "bitflags 2.8.0", + "objc2 0.6.2", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-symbols" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1270,15 +1408,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.8.0", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-cloud-kit 0.2.2", + "objc2-core-data 0.2.2", + "objc2-core-image 0.2.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-link-presentation", - "objc2-quartz-core", + "objc2-quartz-core 0.2.2", "objc2-symbols", "objc2-uniform-type-identifiers", "objc2-user-notifications", @@ -1290,9 +1428,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -1302,10 +1440,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.8.0", - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2609,7 +2747,7 @@ dependencies = [ "android-activity", "atomic-waker", "bitflags 2.8.0", - "block2", + "block2 0.5.1", "bytemuck", "calloop", "cfg_aliases", @@ -2622,9 +2760,9 @@ dependencies = [ "libc", "memmap2", "ndk", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", "percent-encoding", diff --git a/platforms/macos/Cargo.toml b/platforms/macos/Cargo.toml index 95b6c25da..71c8b3237 100644 --- a/platforms/macos/Cargo.toml +++ b/platforms/macos/Cargo.toml @@ -18,14 +18,14 @@ default-target = "x86_64-apple-darwin" accesskit = { version = "0.21.0", path = "../../common" } accesskit_consumer = { version = "0.30.0", path = "../../consumer" } hashbrown = { version = "0.15", default-features = false, features = ["default-hasher"] } -objc2 = "0.5.1" -objc2-foundation = { version = "0.2.0", features = [ +objc2 = "0.6.2" +objc2-foundation = { version = "0.3.1", features = [ "NSArray", "NSDictionary", "NSValue", "NSThread", ] } -objc2-app-kit = { version = "0.2.0", features = [ +objc2-app-kit = { version = "0.3.1", features = [ "NSAccessibility", "NSAccessibilityConstants", "NSAccessibilityElement", diff --git a/platforms/macos/src/adapter.rs b/platforms/macos/src/adapter.rs index 2de5dbafc..52297d365 100644 --- a/platforms/macos/src/adapter.rs +++ b/platforms/macos/src/adapter.rs @@ -15,7 +15,7 @@ use accesskit::{ Tree as TreeData, TreeUpdate, }; use accesskit_consumer::{FilterResult, Tree}; -use objc2::rc::{Id, WeakId}; +use objc2::rc::{Retained, Weak}; use objc2_app_kit::NSView; use objc2_foundation::{MainThreadMarker, NSArray, NSObject, NSPoint}; use std::fmt::{Debug, Formatter}; @@ -25,7 +25,7 @@ const PLACEHOLDER_ROOT_ID: NodeId = NodeId(0); enum State { Inactive { - view: WeakId, + view: Weak, is_view_focused: bool, action_handler: Rc, mtm: MainThreadMarker, @@ -91,8 +91,8 @@ impl Adapter { is_view_focused: bool, action_handler: impl 'static + ActionHandler, ) -> Self { - let view = unsafe { Id::retain(view as *mut NSView) }.unwrap(); - let view = WeakId::from_id(&view); + let view = unsafe { Retained::retain(view as *mut NSView) }.unwrap(); + let view = Weak::from_retained(&view); let mtm = MainThreadMarker::new().unwrap(); let state = State::Inactive { view, @@ -231,20 +231,20 @@ impl Adapter { let state = tree.state(); let node = state.root(); let platform_nodes = if filter(&node) == FilterResult::Include { - vec![Id::into_super(Id::into_super( + vec![Retained::into_super(Retained::into_super( context.get_or_create_platform_node(node.id()), ))] } else { node.filtered_children(filter) .map(|node| { - Id::into_super(Id::into_super( + Retained::into_super(Retained::into_super( context.get_or_create_platform_node(node.id()), )) }) - .collect::>>() + .collect::>>() }; - let array = NSArray::from_vec(platform_nodes); - Id::autorelease_return(array) + let array = NSArray::from_retained_slice(&platform_nodes); + Retained::autorelease_return(array) } pub fn focus( @@ -256,14 +256,14 @@ impl Adapter { let state = tree.state(); if let Some(node) = state.focus() { if can_be_focused(&node) { - return Id::autorelease_return(context.get_or_create_platform_node(node.id())) + return Retained::autorelease_return(context.get_or_create_platform_node(node.id())) as *mut _; } } null_mut() } - fn weak_view(&self) -> &WeakId { + fn weak_view(&self) -> &Weak { match &self.state { State::Inactive { view, .. } => view, State::Placeholder { @@ -292,6 +292,6 @@ impl Adapter { let root = state.root(); let point = from_ns_point(&view, &root, point); let node = root.node_at_point(point, &filter).unwrap_or(root); - Id::autorelease_return(context.get_or_create_platform_node(node.id())) as *mut _ + Retained::autorelease_return(context.get_or_create_platform_node(node.id())) as *mut _ } } diff --git a/platforms/macos/src/context.rs b/platforms/macos/src/context.rs index b3d51fa21..ee87a4ffc 100644 --- a/platforms/macos/src/context.rs +++ b/platforms/macos/src/context.rs @@ -7,7 +7,7 @@ use crate::node::PlatformNode; use accesskit::{ActionHandler, ActionRequest, NodeId}; use accesskit_consumer::Tree; use hashbrown::HashMap; -use objc2::rc::{Id, WeakId}; +use objc2::rc::{Retained, Weak}; use objc2_app_kit::*; use objc2_foundation::MainThreadMarker; use std::fmt::Debug; @@ -32,10 +32,10 @@ impl ActionHandlerNoMut for ActionHandlerWrapper { } pub(crate) struct Context { - pub(crate) view: WeakId, + pub(crate) view: Weak, pub(crate) tree: RefCell, pub(crate) action_handler: Rc, - platform_nodes: RefCell>>, + platform_nodes: RefCell>>, pub(crate) mtm: MainThreadMarker, } @@ -53,7 +53,7 @@ impl Debug for Context { impl Context { pub(crate) fn new( - view: WeakId, + view: Weak, tree: Tree, action_handler: Rc, mtm: MainThreadMarker, @@ -67,7 +67,10 @@ impl Context { }) } - pub(crate) fn get_or_create_platform_node(self: &Rc, id: NodeId) -> Id { + pub(crate) fn get_or_create_platform_node( + self: &Rc, + id: NodeId, + ) -> Retained { let mut platform_nodes = self.platform_nodes.borrow_mut(); if let Some(result) = platform_nodes.get(&id) { return result.clone(); @@ -78,7 +81,7 @@ impl Context { result } - pub(crate) fn remove_platform_node(&self, id: NodeId) -> Option> { + pub(crate) fn remove_platform_node(&self, id: NodeId) -> Option> { let mut platform_nodes = self.platform_nodes.borrow_mut(); platform_nodes.remove(&id) } diff --git a/platforms/macos/src/event.rs b/platforms/macos/src/event.rs index 6758b55e4..036cc50e5 100644 --- a/platforms/macos/src/event.rs +++ b/platforms/macos/src/event.rs @@ -36,9 +36,9 @@ impl QueuedEvent { Self::Announcement { text: node.value().unwrap(), priority: if node.live() == Live::Assertive { - NSAccessibilityPriorityLevel::NSAccessibilityPriorityHigh + NSAccessibilityPriorityLevel::High } else { - NSAccessibilityPriorityLevel::NSAccessibilityPriorityMedium + NSAccessibilityPriorityLevel::Medium }, } } @@ -77,7 +77,7 @@ impl QueuedEvent { } }; - let mut user_info = NSMutableDictionary::<_, AnyObject>::new(); + let user_info = NSMutableDictionary::<_, AnyObject>::new(); let text = NSString::from_str(&text); unsafe { user_info.setObject_forKey( diff --git a/platforms/macos/src/node.rs b/platforms/macos/src/node.rs index 29cc4fce9..45be1c935 100644 --- a/platforms/macos/src/node.rs +++ b/platforms/macos/src/node.rs @@ -15,11 +15,10 @@ use accesskit::{ }; use accesskit_consumer::{FilterResult, Node}; use objc2::{ - declare_class, msg_send_id, - mutability::InteriorMutable, - rc::Id, + define_class, msg_send, + rc::Retained, runtime::{AnyObject, Sel}, - sel, ClassType, DeclaredClass, + sel, AnyThread, DeclaredClass, }; use objc2_app_kit::*; use objc2_foundation::{ @@ -357,32 +356,26 @@ impl NodeWrapper<'_> { } } +#[derive(Debug)] pub(crate) struct PlatformNodeIvars { context: Weak, node_id: NodeId, } -declare_class!( +define_class!( + #[unsafe(super(NSAccessibilityElement))] + #[derive(Debug)] + #[ivars = PlatformNodeIvars] + #[name = "AccessKitNode"] pub(crate) struct PlatformNode; - unsafe impl ClassType for PlatformNode { - #[inherits(NSObject)] - type Super = NSAccessibilityElement; - type Mutability = InteriorMutable; - const NAME: &'static str = "AccessKitNode"; - } - - impl DeclaredClass for PlatformNode { - type Ivars = PlatformNodeIvars; - } - - unsafe impl PlatformNode { - #[method_id(accessibilityParent)] - fn parent(&self) -> Option> { + impl PlatformNode { + #[unsafe(method_id(accessibilityParent))] + fn parent(&self) -> Option> { self.resolve_with_context(|node, context| { if let Some(parent) = node.filtered_parent(&filter) { - Some(Id::into_super(Id::into_super(Id::into_super(context.get_or_create_platform_node(parent.id()))))) + Some(Retained::into_super(Retained::into_super(Retained::into_super(context.get_or_create_platform_node(parent.id()))))) } else { context .view @@ -393,8 +386,8 @@ declare_class!( .flatten() } - #[method_id(accessibilityWindow)] - fn window(&self) -> Option> { + #[unsafe(method_id(accessibilityWindow))] + fn window(&self) -> Option> { self.resolve_with_context(|_, context| { context .view @@ -404,8 +397,8 @@ declare_class!( .flatten() } - #[method_id(accessibilityTopLevelUIElement)] - fn top_level(&self) -> Option> { + #[unsafe(method_id(accessibilityTopLevelUIElement))] + fn top_level(&self) -> Option> { self.resolve_with_context(|_, context| { context .view @@ -415,19 +408,19 @@ declare_class!( .flatten() } - #[method_id(accessibilityChildren)] - fn children(&self) -> Option>> { + #[unsafe(method_id(accessibilityChildren))] + fn children(&self) -> Option>> { self.children_internal() } - #[method_id(accessibilityChildrenInNavigationOrder)] - fn children_in_navigation_order(&self) -> Option>> { + #[unsafe(method_id(accessibilityChildrenInNavigationOrder))] + fn children_in_navigation_order(&self) -> Option>> { // For now, we assume the children are in navigation order. self.children_internal() } - #[method_id(accessibilitySelectedChildren)] - fn selected_children(&self) -> Option>> { + #[unsafe(method_id(accessibilitySelectedChildren))] + fn selected_children(&self) -> Option>> { self.resolve_with_context(|node, context| { let wrapper = NodeWrapper(node); if !wrapper.is_container_with_selectable_children() { @@ -437,13 +430,13 @@ declare_class!( .items(filter) .filter(|item| item.is_selected() == Some(true)) .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - Some(NSArray::from_vec(platform_nodes)) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) }) .flatten() } - #[method(accessibilityFrame)] + #[unsafe(method(accessibilityFrame))] fn frame(&self) -> NSRect { self.resolve_with_context(|node, context| { let view = match context.view.load() { @@ -467,42 +460,42 @@ declare_class!( .unwrap_or(NSRect::ZERO) } - #[method_id(accessibilityRole)] - fn role(&self) -> Id { + #[unsafe(method_id(accessibilityRole))] + fn role(&self) -> Retained { self.resolve(ns_role) .unwrap_or(unsafe { NSAccessibilityUnknownRole }) .copy() } - #[method_id(accessibilitySubrole)] - fn sub_role(&self) -> Id { + #[unsafe(method_id(accessibilitySubrole))] + fn sub_role(&self) -> Retained { self.resolve(ns_sub_role) .unwrap_or(unsafe { NSAccessibilityUnknownSubrole }) .copy() } - #[method_id(accessibilityRoleDescription)] - fn role_description(&self) -> Option> { + #[unsafe(method_id(accessibilityRoleDescription))] + fn role_description(&self) -> Option> { self.resolve(|node| { if let Some(role_description) = node.role_description() { Some(NSString::from_str(role_description)) } else { - unsafe { msg_send_id![super(self), accessibilityRoleDescription] } + unsafe { msg_send![super(self), accessibilityRoleDescription] } } }) .flatten() } - #[method_id(accessibilityIdentifier)] - fn identifier(&self) -> Option> { + #[unsafe(method_id(accessibilityIdentifier))] + fn identifier(&self) -> Option> { self.resolve(|node| { node.author_id().map(NSString::from_str) }) .flatten() } - #[method_id(accessibilityTitle)] - fn title(&self) -> Option> { + #[unsafe(method_id(accessibilityTitle))] + fn title(&self) -> Option> { self.resolve(|node| { let wrapper = NodeWrapper(node); wrapper.title().map(|title| NSString::from_str(&title)) @@ -510,8 +503,8 @@ declare_class!( .flatten() } - #[method_id(accessibilityHelp)] - fn description(&self) -> Option> { + #[unsafe(method_id(accessibilityHelp))] + fn description(&self) -> Option> { self.resolve(|node| { let wrapper = NodeWrapper(node); wrapper.description().map(|description| NSString::from_str(&description)) @@ -519,8 +512,8 @@ declare_class!( .flatten() } - #[method_id(accessibilityPlaceholderValue)] - fn placeholder(&self) -> Option> { + #[unsafe(method_id(accessibilityPlaceholderValue))] + fn placeholder(&self) -> Option> { self.resolve(|node| { let wrapper = NodeWrapper(node); wrapper.placeholder().map(NSString::from_str) @@ -528,48 +521,48 @@ declare_class!( .flatten() } - #[method_id(accessibilityValue)] - fn value(&self) -> Option> { + #[unsafe(method_id(accessibilityValue))] + fn value(&self) -> Option> { self.resolve(|node| { let wrapper = NodeWrapper(node); wrapper.value().map(|value| match value { Value::Bool(value) => { - Id::into_super(Id::into_super(NSNumber::new_bool(value))) + Retained::into_super(Retained::into_super(NSNumber::new_bool(value))) } Value::Number(value) => { - Id::into_super(Id::into_super(NSNumber::new_f64(value))) + Retained::into_super(Retained::into_super(NSNumber::new_f64(value))) } Value::String(value) => { - Id::into_super(NSString::from_str(&value)) + Retained::into_super(NSString::from_str(&value)) } }) }) .flatten() } - #[method(setAccessibilityValue:)] + #[unsafe(method(setAccessibilityValue:))] fn set_value(&self, _value: &NSObject) { // This isn't yet implemented. See the comment on this selector // in `is_selector_allowed`. } - #[method_id(accessibilityMinValue)] - fn min_value(&self) -> Option> { + #[unsafe(method_id(accessibilityMinValue))] + fn min_value(&self) -> Option> { self.resolve(|node| { node.min_numeric_value().map(NSNumber::new_f64) }) .flatten() } - #[method_id(accessibilityMaxValue)] - fn max_value(&self) -> Option> { + #[unsafe(method_id(accessibilityMaxValue))] + fn max_value(&self) -> Option> { self.resolve(|node| { node.max_numeric_value().map(NSNumber::new_f64) }) .flatten() } - #[method(accessibilityOrientation)] + #[unsafe(method(accessibilityOrientation))] fn orientation(&self) -> NSAccessibilityOrientation { self.resolve(|node| { match node.orientation() { @@ -581,24 +574,24 @@ declare_class!( .unwrap_or(NSAccessibilityOrientation::Unknown) } - #[method(isAccessibilityElement)] + #[unsafe(method(isAccessibilityElement))] fn is_accessibility_element(&self) -> bool { self.resolve(|node| filter(node) == FilterResult::Include) .unwrap_or(false) } - #[method(isAccessibilityFocused)] + #[unsafe(method(isAccessibilityFocused))] fn is_focused(&self) -> bool { self.resolve(|node| node.is_focused() && can_be_focused(node)) .unwrap_or(false) } - #[method(isAccessibilityEnabled)] + #[unsafe(method(isAccessibilityEnabled))] fn is_enabled(&self) -> bool { self.resolve(|node| !node.is_disabled()).unwrap_or(false) } - #[method(setAccessibilityFocused:)] + #[unsafe(method(setAccessibilityFocused:))] fn set_focused(&self, focused: bool) { self.resolve_with_context(|node, context| { if focused { @@ -622,7 +615,7 @@ declare_class!( }); } - #[method(accessibilityPerformPress)] + #[unsafe(method(accessibilityPerformPress))] fn press(&self) -> bool { self.resolve_with_context(|node, context| { let clickable = node.is_clickable(&filter); @@ -638,7 +631,7 @@ declare_class!( .unwrap_or(false) } - #[method(accessibilityPerformIncrement)] + #[unsafe(method(accessibilityPerformIncrement))] fn increment(&self) -> bool { self.resolve_with_context(|node, context| { let supports_increment = node.supports_increment(&filter); @@ -654,7 +647,7 @@ declare_class!( .unwrap_or(false) } - #[method(accessibilityPerformDecrement)] + #[unsafe(method(accessibilityPerformDecrement))] fn decrement(&self) -> bool { self.resolve_with_context(|node, context| { let supports_decrement = node.supports_decrement(&filter); @@ -670,12 +663,12 @@ declare_class!( .unwrap_or(false) } - #[method(accessibilityNotifiesWhenDestroyed)] + #[unsafe(method(accessibilityNotifiesWhenDestroyed))] fn notifies_when_destroyed(&self) -> bool { true } - #[method(accessibilityNumberOfCharacters)] + #[unsafe(method(accessibilityNumberOfCharacters))] fn number_of_characters(&self) -> NSInteger { self.resolve(|node| { if node.supports_text_ranges() { @@ -687,8 +680,8 @@ declare_class!( .unwrap_or(0) } - #[method_id(accessibilitySelectedText)] - fn selected_text(&self) -> Option> { + #[unsafe(method_id(accessibilitySelectedText))] + fn selected_text(&self) -> Option> { self.resolve(|node| { if node.supports_text_ranges() { if let Some(range) = node.text_selection() { @@ -701,7 +694,7 @@ declare_class!( .flatten() } - #[method(accessibilitySelectedTextRange)] + #[unsafe(method(accessibilitySelectedTextRange))] fn selected_text_range(&self) -> NSRange { self.resolve(|node| { if node.supports_text_ranges() { @@ -714,7 +707,7 @@ declare_class!( .unwrap_or_else(|| NSRange::new(0, 0)) } - #[method(accessibilityInsertionPointLineNumber)] + #[unsafe(method(accessibilityInsertionPointLineNumber))] fn insertion_point_line_number(&self) -> NSInteger { self.resolve(|node| { if node.supports_text_ranges() { @@ -727,7 +720,7 @@ declare_class!( .unwrap_or(0) } - #[method(accessibilityRangeForLine:)] + #[unsafe(method(accessibilityRangeForLine:))] fn range_for_line(&self, line_index: NSInteger) -> NSRange { self.resolve(|node| { if node.supports_text_ranges() && line_index >= 0 { @@ -740,7 +733,7 @@ declare_class!( .unwrap_or_else(|| NSRange::new(0, 0)) } - #[method(accessibilityRangeForPosition:)] + #[unsafe(method(accessibilityRangeForPosition:))] fn range_for_position(&self, point: NSPoint) -> NSRange { self.resolve_with_context(|node, context| { let view = match context.view.load() { @@ -760,8 +753,8 @@ declare_class!( .unwrap_or_else(|| NSRange::new(0, 0)) } - #[method_id(accessibilityStringForRange:)] - fn string_for_range(&self, range: NSRange) -> Option> { + #[unsafe(method_id(accessibilityStringForRange:))] + fn string_for_range(&self, range: NSRange) -> Option> { self.resolve(|node| { if node.supports_text_ranges() { if let Some(range) = from_ns_range(node, range) { @@ -774,7 +767,7 @@ declare_class!( .flatten() } - #[method(accessibilityFrameForRange:)] + #[unsafe(method(accessibilityFrameForRange:))] fn frame_for_range(&self, range: NSRange) -> NSRect { self.resolve_with_context(|node, context| { let view = match context.view.load() { @@ -799,7 +792,7 @@ declare_class!( .unwrap_or(NSRect::ZERO) } - #[method(accessibilityLineForIndex:)] + #[unsafe(method(accessibilityLineForIndex:))] fn line_for_index(&self, index: NSInteger) -> NSInteger { self.resolve(|node| { if node.supports_text_ranges() && index >= 0 { @@ -812,7 +805,7 @@ declare_class!( .unwrap_or(0) } - #[method(accessibilityRangeForIndex:)] + #[unsafe(method(accessibilityRangeForIndex:))] fn range_for_index(&self, index: NSInteger) -> NSRange { self.resolve(|node| { if node.supports_text_ranges() && index >= 0 { @@ -825,7 +818,7 @@ declare_class!( .unwrap_or_else(|| NSRange::new(0, 0)) } - #[method(setAccessibilitySelectedTextRange:)] + #[unsafe(method(setAccessibilitySelectedTextRange:))] fn set_selected_text_range(&self, range: NSRange) { self.resolve_with_context(|node, context| { if node.supports_text_ranges() { @@ -840,13 +833,13 @@ declare_class!( }); } - #[method(isAccessibilityRequired)] + #[unsafe(method(isAccessibilityRequired))] fn is_required(&self) -> bool { self.resolve(|node| node.is_required()) .unwrap_or(false) } - #[method(isAccessibilitySelected)] + #[unsafe(method(isAccessibilitySelected))] fn is_selected(&self) -> bool { self.resolve(|node| { let wrapper = NodeWrapper(node); @@ -857,7 +850,7 @@ declare_class!( .unwrap_or(false) } - #[method(setAccessibilitySelected:)] + #[unsafe(method(setAccessibilitySelected:))] fn set_selected(&self, selected: bool) { self.resolve_with_context(|node, context| { let wrapper = NodeWrapper(node); @@ -878,8 +871,8 @@ declare_class!( }); } - #[method_id(accessibilityRows)] - fn rows(&self) -> Option>> { + #[unsafe(method_id(accessibilityRows))] + fn rows(&self) -> Option>> { self.resolve_with_context(|node, context| { let wrapper = NodeWrapper(node); if !wrapper.is_container_with_selectable_children() { @@ -888,14 +881,14 @@ declare_class!( let platform_nodes = node .items(filter) .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - Some(NSArray::from_vec(platform_nodes)) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) }) .flatten() } - #[method_id(accessibilitySelectedRows)] - fn selected_rows(&self) -> Option>> { + #[unsafe(method_id(accessibilitySelectedRows))] + fn selected_rows(&self) -> Option>> { self.resolve_with_context(|node, context| { let wrapper = NodeWrapper(node); if !wrapper.is_container_with_selectable_children() { @@ -905,13 +898,13 @@ declare_class!( .items(filter) .filter(|item| item.is_selected() == Some(true)) .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - Some(NSArray::from_vec(platform_nodes)) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) }) .flatten() } - #[method(accessibilityPerformPick)] + #[unsafe(method(accessibilityPerformPick))] fn pick(&self) -> bool { self.resolve_with_context(|node, context| { let wrapper = NodeWrapper(node); @@ -930,10 +923,10 @@ declare_class!( .unwrap_or(false) } - #[method_id(accessibilityLinkedUIElements)] - fn linked_ui_elements(&self) -> Option>> { + #[unsafe(method_id(accessibilityLinkedUIElements))] + fn linked_ui_elements(&self) -> Option>> { self.resolve_with_context(|node, context| { - let platform_nodes: Vec> = node + let platform_nodes: Vec> = node .controls() .filter(|controlled| filter(controlled) == FilterResult::Include) .map(|controlled| context.get_or_create_platform_node(controlled.id())) @@ -941,14 +934,14 @@ declare_class!( if platform_nodes.is_empty() { None } else { - Some(NSArray::from_vec(platform_nodes)) + Some(NSArray::from_retained_slice(&platform_nodes)) } }) .flatten() } - #[method_id(accessibilityTabs)] - fn tabs(&self) -> Option>> { + #[unsafe(method_id(accessibilityTabs))] + fn tabs(&self) -> Option>> { self.resolve_with_context(|node, context| { if node.role() != Role::TabList { return None; @@ -957,8 +950,8 @@ declare_class!( .filtered_children(filter) .filter(|child| child.role() == Role::Tab) .map(|tab| context.get_or_create_platform_node(tab.id())) - .collect::>>(); - Some(NSArray::from_vec(platform_nodes)) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) }) .flatten() } @@ -970,18 +963,18 @@ declare_class!( // of the legacy methods below only needs to cover actions not already // handled by the newer methods. - #[method_id(accessibilityActionNames)] - fn action_names(&self) -> Id> { + #[unsafe(method_id(accessibilityActionNames))] + fn action_names(&self) -> Retained> { let mut result = vec![]; self.resolve(|node| { if node.supports_action(Action::ScrollIntoView, &filter) { result.push(ns_string!(SCROLL_TO_VISIBLE_ACTION).copy()); } }); - NSArray::from_vec(result) + NSArray::from_retained_slice(&result) } - #[method(accessibilityPerformAction:)] + #[unsafe(method(accessibilityPerformAction:))] fn perform_action(&self, action: &NSString) { self.resolve_with_context(|node, context| { if action == ns_string!(SCROLL_TO_VISIBLE_ACTION) { @@ -994,7 +987,7 @@ declare_class!( }); } - #[method(isAccessibilitySelectorAllowed:)] + #[unsafe(method(isAccessibilitySelectorAllowed:))] fn is_selector_allowed(&self, selector: Sel) -> bool { self.resolve(|node| { if selector == sel!(setAccessibilityFocused:) { @@ -1085,10 +1078,10 @@ declare_class!( ); impl PlatformNode { - pub(crate) fn new(context: Weak, node_id: NodeId) -> Id { + pub(crate) fn new(context: Weak, node_id: NodeId) -> Retained { let this = Self::alloc().set_ivars(PlatformNodeIvars { context, node_id }); - unsafe { msg_send_id![super(this), init] } + unsafe { msg_send![super(this), init] } } fn resolve_with_context(&self, f: F) -> Option @@ -1109,13 +1102,13 @@ impl PlatformNode { self.resolve_with_context(|node, _| f(node)) } - fn children_internal(&self) -> Option>> { + fn children_internal(&self) -> Option>> { self.resolve_with_context(|node, context| { let platform_nodes = node .filtered_children(filter) .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - NSArray::from_vec(platform_nodes) + .collect::>>(); + NSArray::from_retained_slice(&platform_nodes) }) } } diff --git a/platforms/macos/src/patch.rs b/platforms/macos/src/patch.rs index 68ada2a49..7ce926c8a 100644 --- a/platforms/macos/src/patch.rs +++ b/platforms/macos/src/patch.rs @@ -7,11 +7,11 @@ use objc2::{ encode::{Encode, EncodeArguments, EncodeReturn, Encoding}, ffi::class_addMethod, msg_send, - runtime::{AnyClass, AnyObject, Bool, MethodImplementation, Sel}, + runtime::{AnyClass, AnyObject, MethodImplementation, Sel}, sel, Message, }; use objc2_app_kit::NSWindow; -use std::{ffi::CString, ptr::null_mut}; +use std::{ffi::CString, ptr::null_mut, str::FromStr}; extern "C" fn focus_forwarder(this: &NSWindow, _cmd: Sel) -> *mut AnyObject { unsafe { @@ -36,7 +36,7 @@ extern "C" fn focus_forwarder(this: &NSWindow, _cmd: Sel) -> *mut AnyObject { /// Also, this function assumes that the specified class is a subclass /// of `NSWindow`. pub unsafe fn add_focus_forwarder_to_window_class(class_name: &str) { - let class = AnyClass::get(class_name).unwrap(); + let class = AnyClass::get(&CString::from_str(class_name).unwrap()).unwrap(); unsafe { add_method( class as *const AnyClass as *mut AnyClass, @@ -66,19 +66,17 @@ where ); let types = method_type_encoding(&F::Return::ENCODING_RETURN, encs); - let success = Bool::from_raw(unsafe { - class_addMethod( - class as *mut _, - sel.as_ptr(), - Some(func.__imp()), - types.as_ptr(), - ) - }); + let success = unsafe { class_addMethod(class as *mut _, sel, func.__imp(), types.as_ptr()) }; assert!(success.as_bool(), "Failed to add method {sel:?}"); } fn count_args(sel: Sel) -> usize { - sel.name().chars().filter(|&c| c == ':').count() + sel.name() + .to_str() + .unwrap() + .chars() + .filter(|&c| c == ':') + .count() } fn method_type_encoding(ret: &Encoding, args: &[Encoding]) -> CString { diff --git a/platforms/macos/src/subclass.rs b/platforms/macos/src/subclass.rs index 9d5b194fb..8b847ba52 100644 --- a/platforms/macos/src/subclass.rs +++ b/platforms/macos/src/subclass.rs @@ -6,20 +6,24 @@ use accesskit::{ActionHandler, ActivationHandler, TreeUpdate}; use objc2::{ declare::ClassBuilder, - declare_class, + define_class, ffi::{ objc_getAssociatedObject, objc_setAssociatedObject, object_setClass, OBJC_ASSOCIATION_RETAIN_NONATOMIC, }, - msg_send_id, - mutability::InteriorMutable, - rc::Id, + msg_send, + rc::Retained, runtime::{AnyClass, Sel}, - sel, ClassType, DeclaredClass, + sel, AnyThread, DeclaredClass, }; use objc2_app_kit::{NSView, NSWindow}; use objc2_foundation::{NSArray, NSObject, NSPoint}; -use std::{cell::RefCell, ffi::c_void, sync::Mutex}; +use std::{ + cell::RefCell, + ffi::{c_void, CString}, + str::FromStr, + sync::Mutex, +}; use crate::{event::QueuedEvents, Adapter}; @@ -41,33 +45,26 @@ struct AssociatedObjectIvars { prev_class: &'static AnyClass, } -declare_class!( +define_class! { + #[unsafe(super(NSObject))] + #[name = "AccessKitSubclassAssociatedObject"] + #[ivars = AssociatedObjectIvars] struct AssociatedObject; - - unsafe impl ClassType for AssociatedObject { - type Super = NSObject; - type Mutability = InteriorMutable; - const NAME: &'static str = "AccessKitSubclassAssociatedObject"; - } - - impl DeclaredClass for AssociatedObject { - type Ivars = AssociatedObjectIvars; - } -); +} impl AssociatedObject { fn new( adapter: Adapter, activation_handler: impl 'static + ActivationHandler, prev_class: &'static AnyClass, - ) -> Id { + ) -> Retained { let state = RefCell::new(AssociatedObjectState { adapter, activation_handler: Box::new(activation_handler), }); let this = Self::alloc().set_ivars(AssociatedObjectIvars { state, prev_class }); - unsafe { msg_send_id![super(this), init] } + unsafe { msg_send![super(this), init] } } } @@ -116,8 +113,8 @@ unsafe extern "C" fn hit_test(this: &NSView, _cmd: Sel, point: NSPoint) -> *mut /// Uses dynamic Objective-C subclassing to implement the `NSView` /// accessibility methods when normal subclassing isn't an option. pub struct SubclassingAdapter { - view: Id, - associated: Id, + view: Retained, + associated: Retained, } impl SubclassingAdapter { @@ -136,16 +133,16 @@ impl SubclassingAdapter { action_handler: impl 'static + ActionHandler, ) -> Self { let view = view as *mut NSView; - let retained_view = unsafe { Id::retain(view) }.unwrap(); + let retained_view = unsafe { Retained::retain(view) }.unwrap(); Self::new_internal(retained_view, activation_handler, action_handler) } fn new_internal( - retained_view: Id, + retained_view: Retained, activation_handler: impl 'static + ActivationHandler, action_handler: impl 'static + ActionHandler, ) -> Self { - let view = Id::as_ptr(&retained_view) as *mut NSView; + let view = Retained::as_ptr(&retained_view) as *mut NSView; if !unsafe { objc_getAssociatedObject(view as *const NSView as *const _, associated_object_key()) } @@ -163,7 +160,7 @@ impl SubclassingAdapter { objc_setAssociatedObject( view as *mut _, associated_object_key(), - Id::as_ptr(&associated) as *mut _, + Retained::as_ptr(&associated) as *mut _, OBJC_ASSOCIATION_RETAIN_NONATOMIC, ) }; @@ -171,8 +168,9 @@ impl SubclassingAdapter { let subclass = match subclasses.iter().find(|entry| entry.0 == prev_class) { Some(entry) => entry.1, None => { - let name = format!("AccessKitSubclassOf{}", prev_class.name()); - let mut builder = ClassBuilder::new(&name, prev_class).unwrap(); + let name = format!("AccessKitSubclassOf{}", prev_class.name().to_str().unwrap()); + let mut builder = + ClassBuilder::new(&CString::from_str(&name).unwrap(), prev_class).unwrap(); unsafe { builder.add_method( sel!(superclass), @@ -258,7 +256,7 @@ impl SubclassingAdapter { impl Drop for SubclassingAdapter { fn drop(&mut self) { let prev_class = self.associated.ivars().prev_class; - let view = Id::as_ptr(&self.view) as *mut NSView; + let view = Retained::as_ptr(&self.view) as *mut NSView; unsafe { object_setClass(view as *mut _, (prev_class as *const AnyClass).cast()) }; unsafe { objc_setAssociatedObject( From c33df52eeea0aedd3e624b1cdd41b3f2dd945a36 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Aug 2026 10:17:00 +0300 Subject: [PATCH 2/7] fix post-merge issues --- Cargo.lock | 1501 +++++++++++++++---------------- platforms/macos/src/node.rs | 94 +- platforms/macos/src/patch.rs | 4 +- platforms/macos/src/subclass.rs | 4 +- platforms/macos/src/util.rs | 11 +- 5 files changed, 795 insertions(+), 819 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 14463ab72..f8bc7163c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.20" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe21446ad43aa56417a767f3e2f3d7c4ca522904de1dd640529a76e9c5c3b33c" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" @@ -36,7 +36,7 @@ version = "0.7.5" dependencies = [ "accesskit", "accesskit_consumer", - "jni", + "jni 0.21.1", "log", ] @@ -57,7 +57,7 @@ name = "accesskit_consumer" version = "0.38.0" dependencies = [ "accesskit", - "hashbrown", + "hashbrown 0.16.1", ] [[package]] @@ -66,10 +66,22 @@ version = "0.1.2" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown", - "objc2 0.6.2", - "objc2-app-kit 0.3.1", - "objc2-foundation 0.3.1", + "hashbrown 0.16.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-ui-kit", +] + +[[package]] +name = "accesskit_macos" +version = "0.26.3" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.16.1", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", ] [[package]] @@ -96,7 +108,7 @@ version = "0.34.0" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown", + "hashbrown 0.16.1", "once_cell", "parking_lot", "scopeguard", @@ -122,29 +134,14 @@ dependencies = [ "winit", ] -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.2.8", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -152,23 +149,21 @@ dependencies = [ [[package]] name = "android-activity" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.8.0", + "bitflags 2.13.1", "cc", - "cesu8", - "jni", - "jni-sys", + "jni 0.22.4", "libc", "log", "ndk", "ndk-context", "ndk-sys", "num_enum", - "thiserror", + "thiserror 2.0.19", ] [[package]] @@ -179,27 +174,27 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-raw-xcb-connection" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5f312b0a56c5cdf967c0aeb67f6289603354951683bc97ddc595ab974ba9aa" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" [[package]] name = "async-broadcast" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ "event-listener", "event-listener-strategy", @@ -209,9 +204,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -221,52 +216,41 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", + "pin-project-lite", "slab", ] -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - [[package]] name = "async-io" -version = "2.3.4" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 0.38.44", + "rustix 1.1.4", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener", "event-listener-strategy", @@ -275,9 +259,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel", "async-io", @@ -288,8 +272,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 0.38.44", - "tracing", + "rustix 1.1.4", ] [[package]] @@ -300,14 +283,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "async-signal" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" dependencies = [ "async-io", "async-lock", @@ -315,10 +298,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.44", + "rustix 1.1.4", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -329,13 +312,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -383,24 +366,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bitflags" @@ -410,9 +378,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block2" @@ -425,18 +393,18 @@ dependencies = [ [[package]] name = "block2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ - "objc2 0.6.2", + "objc2 0.6.4", ] [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ "async-channel", "async-task", @@ -447,21 +415,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "calloop" @@ -469,12 +437,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "log", "polling", "rustix 0.38.44", "slab", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -491,11 +459,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ + "find-msvc-tools", "jobserver", + "libc", + "shlex", ] [[package]] @@ -506,21 +477,21 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -537,9 +508,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -547,15 +518,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -566,9 +537,9 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -577,24 +548,24 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] -name = "ctor-lite" -version = "0.1.0" +name = "ctor" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" +checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" +dependencies = [ + "dtor", +] [[package]] name = "cursor-icon" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" +checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] name = "dispatch" @@ -604,34 +575,40 @@ checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" [[package]] name = "dispatch2" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.8.0", - "objc2 0.6.2", + "bitflags 2.13.1", + "objc2 0.6.4", ] [[package]] name = "dlib" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" dependencies = [ "libloading", ] [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" -version = "0.1.1" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + +[[package]] +name = "dtor" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" [[package]] name = "dyn-clone" @@ -641,15 +618,15 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "endi" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" [[package]] name = "enumflags2" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" dependencies = [ "enumflags2_derive", "serde", @@ -657,13 +634,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -674,41 +651,40 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "event-listener" -version = "5.3.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener", "pin-project-lite", @@ -716,9 +692,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "foldhash" @@ -738,13 +720,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -755,21 +737,21 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -780,74 +762,67 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", - "pin-utils", "slab", ] [[package]] name = "gethostname" -version = "0.4.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "libc", - "windows-targets 0.48.1", + "rustix 1.1.4", + "windows-link", ] [[package]] name = "getrandom" -version = "0.2.8" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "r-efi 5.3.0", + "wasip2", ] [[package]] name = "getrandom" -version = "0.3.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "r-efi 6.0.0", ] -[[package]] -name = "gimli" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" - [[package]] name = "hashbrown" version = "0.16.1" @@ -857,6 +832,12 @@ dependencies = [ "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + [[package]] name = "heck" version = "0.5.0" @@ -865,9 +846,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -877,19 +858,19 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "indexmap" -version = "2.11.4" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.17.1", ] [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jni" @@ -900,63 +881,118 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-sys 0.3.1", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.19", + "walkdir", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", +] + [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] [[package]] name = "libc" -version = "0.2.169" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "libredox" -version = "0.0.2" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "libc", - "redox_syscall 0.4.1", + "plain", + "redox_syscall 0.9.1", ] [[package]] @@ -967,77 +1003,58 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.17" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "memchr" -version = "2.5.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" -version = "0.9.0" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - [[package]] name = "mio" -version = "1.0.3" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -1046,14 +1063,14 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.8.0", - "jni-sys", + "bitflags 2.13.1", + "jni-sys 0.3.1", "log", "ndk-sys", "num_enum", "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1068,51 +1085,29 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.8.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", + "jni-sys 0.3.1", ] [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1133,9 +1128,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ "objc2-encode", ] @@ -1146,7 +1141,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -1158,21 +1153,23 @@ dependencies = [ [[package]] name = "objc2-app-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.8.0", - "block2 0.6.1", + "bitflags 2.13.1", + "block2 0.6.2", "libc", - "objc2 0.6.2", - "objc2-cloud-kit 0.3.1", - "objc2-core-data 0.3.1", + "objc2 0.6.4", + "objc2-cloud-kit 0.3.2", + "objc2-core-data 0.3.2", "objc2-core-foundation", "objc2-core-graphics", - "objc2-core-image 0.3.1", - "objc2-foundation 0.3.1", - "objc2-quartz-core 0.3.1", + "objc2-core-image 0.3.2", + "objc2-core-text", + "objc2-core-video", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", ] [[package]] @@ -1181,7 +1178,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -1190,13 +1187,13 @@ dependencies = [ [[package]] name = "objc2-cloud-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.8.0", - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-foundation 0.3.2", ] [[package]] @@ -1216,7 +1213,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1224,35 +1221,35 @@ dependencies = [ [[package]] name = "objc2-core-data" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.8.0", - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-foundation 0.3.2", ] [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "dispatch2", - "objc2 0.6.2", + "objc2 0.6.4", ] [[package]] name = "objc2-core-graphics" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "dispatch2", - "objc2 0.6.2", + "objc2 0.6.4", "objc2-core-foundation", "objc2-io-surface", ] @@ -1271,12 +1268,12 @@ dependencies = [ [[package]] name = "objc2-core-image" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" dependencies = [ - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "objc2 0.6.4", + "objc2-foundation 0.3.2", ] [[package]] @@ -1291,6 +1288,31 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -1303,7 +1325,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "dispatch", "libc", @@ -1312,25 +1334,25 @@ dependencies = [ [[package]] name = "objc2-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.8.0", - "block2 0.6.1", + "bitflags 2.13.1", + "block2 0.6.2", "libc", - "objc2 0.6.2", + "objc2 0.6.4", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.8.0", - "objc2 0.6.2", + "bitflags 2.13.1", + "objc2 0.6.4", "objc2-core-foundation", ] @@ -1352,7 +1374,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1364,7 +1386,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1373,13 +1395,14 @@ dependencies = [ [[package]] name = "objc2-quartz-core" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.8.0", - "objc2 0.6.2", - "objc2-foundation 0.3.1", + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", ] [[package]] @@ -1398,7 +1421,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -1430,34 +1453,26 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", ] -[[package]] -name = "object" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "orbclient" -version = "0.3.47" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" dependencies = [ + "libc", "libredox", ] @@ -1473,9 +1488,9 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.18.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25e9fb15717794fae58ab55c26e044103aad13186fbb625893f9a3bbcc24228" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ "ttf-parser", ] @@ -1488,9 +1503,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -1498,22 +1513,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "phf" @@ -1546,7 +1561,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1560,41 +1575,35 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", "fastrand", @@ -1603,54 +1612,59 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "polling" -version = "3.7.4" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 0.38.44", - "tracing", - "windows-sys 0.59.0", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "pyo3" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c" +checksum = "fc153f5fd745cc038b5eed86622125969f8a39834a57bc96beaaf2512b1da729" dependencies = [ "libc", "once_cell", @@ -1662,18 +1676,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078" +checksum = "bb77d9aa6d647507b55c69ee714d266d84c526c78ff0bc6dd8757f58591e64d1" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b" +checksum = "3160087aa5733bce7d9a729f8c55f85a2a53b74742a09613178eeebff0722253" dependencies = [ "libc", "pyo3-build-config", @@ -1681,61 +1695,57 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771" +checksum = "91f9d455db760a9a0b0ddeaac25f1390b8a36ba73dfbda9f127cac6fc340d4d5" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "pyo3-macros-backend" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362" +checksum = "e343bcec300ff262f5806a33a4e51b6d097a8a46435f512fcb83e95592581625" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "quick-xml" -version = "0.36.2" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" dependencies = [ "memchr", - "serde", ] [[package]] -name = "quick-xml" -version = "0.37.2" +name = "quote" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ - "memchr", + "proc-macro2", ] [[package]] -name = "quote" -version = "1.0.37" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "r-efi" -version = "5.2.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "raw-window-handle" @@ -1760,38 +1770,50 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", +] + +[[package]] +name = "redox_syscall" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07507be7b4a5f9f26eeb41eeaebb1f5a7ff29dfb29739facc21d35bf8b11c21e" +dependencies = [ + "bitflags 2.13.1", ] [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] -name = "rustc-demangle" -version = "0.1.23" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] [[package]] name = "rustix" @@ -1799,7 +1821,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -1808,28 +1830,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "errno", "libc", - "linux-raw-sys 0.9.3", - "windows-sys 0.59.0", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", ] [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -1842,9 +1858,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" dependencies = [ "dyn-clone", "ref-cast", @@ -1856,14 +1872,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.1.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301858a4023d78debd2353c7426dc486001bddc91ae31a76fb1f55132f7e2633" +checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 3.0.3", ] [[package]] @@ -1874,9 +1890,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" @@ -1891,11 +1907,17 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -1903,82 +1925,102 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_derive_internals" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "serde_repr" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] +[[package]] +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -1992,7 +2034,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "calloop", "calloop-wayland-source", "cursor-icon", @@ -2000,7 +2042,7 @@ dependencies = [ "log", "memmap2", "rustix 0.38.44", - "thiserror", + "thiserror 1.0.69", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -2013,21 +2055,21 @@ dependencies = [ [[package]] name = "smol_str" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.5.7" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2048,8 +2090,8 @@ dependencies = [ "objc2-foundation 0.3.2", "objc2-quartz-core 0.3.2", "raw-window-handle 0.6.2", - "redox_syscall 0.5.13", - "rustix 1.0.3", + "redox_syscall 0.5.18", + "rustix 1.1.4", "tiny-xlib", "tracing", "wasm-bindgen", @@ -2069,15 +2111,26 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strict-num" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9df65f20698aeed245efdde3628a6b559ea1239bbb871af1b6e3b58c413b2bd1" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "syn" -version = "2.0.87" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -2092,42 +2145,62 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] name = "tempfile" -version = "3.19.1" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.2", + "getrandom 0.4.3", "once_cell", - "rustix 1.0.3", - "windows-sys 0.59.0", + "rustix 1.1.4", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.64" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.19", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "tiny-skia" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b72a92a05db376db09fe6d50b7948d106011761c05a6a45e23e17ee9b556222" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", "arrayvec", @@ -2139,9 +2212,9 @@ dependencies = [ [[package]] name = "tiny-skia-path" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac3865b9708fc7e1961a65c3a4fa55e984272f33092d3c859929f887fceb647" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" dependencies = [ "arrayref", "bytemuck", @@ -2150,12 +2223,12 @@ dependencies = [ [[package]] name = "tiny-xlib" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" +checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" dependencies = [ "as-raw-xcb-connection", - "ctor-lite", + "ctor", "libloading", "pkg-config", "tracing", @@ -2163,35 +2236,34 @@ dependencies = [ [[package]] name = "tokio" -version = "1.44.2" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ - "backtrace", "libc", "mio", "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" dependencies = [ "futures-core", "pin-project-lite", @@ -2200,18 +2272,31 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ "winnow", ] @@ -2234,7 +2319,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2248,53 +2333,55 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.18.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "uds_windows" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "winapi", + "windows-sys 0.61.2", ] [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "uuid" -version = "1.18.1" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ - "serde", + "js-sys", + "serde_core", + "wasm-bindgen", ] [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -2302,63 +2389,47 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2366,35 +2437,35 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn", - "wasm-bindgen-backend", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] [[package]] name = "wayland-backend" -version = "0.3.8" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" +checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.44", + "rustix 1.1.4", "scoped-tls", "smallvec", "wayland-sys", @@ -2402,12 +2473,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.8" +version = "0.31.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" +checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" dependencies = [ - "bitflags 2.8.0", - "rustix 0.38.44", + "bitflags 2.13.1", + "rustix 1.1.4", "wayland-backend", "wayland-scanner", ] @@ -2418,29 +2489,29 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.8" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" +checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" dependencies = [ - "rustix 0.38.44", + "rustix 1.1.4", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.6" +version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" +checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -2448,11 +2519,11 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.6" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" +checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -2461,11 +2532,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.6" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" +checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -2474,20 +2545,20 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.6" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", - "quick-xml 0.37.2", + "quick-xml", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.6" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" dependencies = [ "dlib", "log", @@ -2497,9 +2568,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -2515,37 +2586,15 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "winapi", + "windows-sys 0.61.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows" version = "0.62.2" @@ -2599,7 +2648,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2610,7 +2659,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2698,21 +2747,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -2744,12 +2778,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -2762,12 +2790,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -2780,12 +2802,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -2804,12 +2820,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -2822,12 +2832,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -2840,12 +2844,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -2858,12 +2856,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -2872,14 +2864,14 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.30.9" +version = "0.30.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" +checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.8.0", + "bitflags 2.13.1", "block2 0.5.1", "bytemuck", "calloop", @@ -2925,21 +2917,18 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.8.0", -] +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "x11-dl" @@ -2954,43 +2943,30 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", "libloading", "once_cell", - "rustix 0.38.44", + "rustix 1.1.4", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "xcursor" -version = "0.3.4" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] - -[[package]] -name = "xdg-home" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] +checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23" [[package]] name = "xkbcommon-dl" @@ -2998,7 +2974,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.13.1", "dlib", "log", "once_cell", @@ -3007,19 +2983,18 @@ dependencies = [ [[package]] name = "xkeysym" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "zbus" -version = "5.5.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" +checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" dependencies = [ "async-broadcast", "async-executor", - "async-fs", "async-io", "async-lock", "async-process", @@ -3032,16 +3007,16 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix", + "libc", "ordered-stream", + "rustix 1.1.4", "serde", "serde_repr", - "static_assertions", "tracing", "uds_windows", - "windows-sys 0.59.0", + "uuid", + "windows-sys 0.61.2", "winnow", - "xdg-home", "zbus_macros", "zbus_names", "zvariant", @@ -3049,9 +3024,9 @@ dependencies = [ [[package]] name = "zbus-lockstep" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" +checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863" dependencies = [ "zbus_xml", "zvariant", @@ -3059,13 +3034,13 @@ dependencies = [ [[package]] name = "zbus-lockstep-macros" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" +checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "zbus-lockstep", "zbus_xml", "zvariant", @@ -3073,14 +3048,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.5.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" +checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "zbus_names", "zvariant", "zvariant_utils", @@ -3088,59 +3063,62 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.2.0" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", - "static_assertions", "winnow", "zvariant", ] [[package]] name = "zbus_xml" -version = "5.0.2" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" +checksum = "d1586c021a01ca0a9216dcd874e546382e156a5cbab5fab6cb5f10087e22682a" dependencies = [ - "quick-xml 0.36.2", "serde", - "static_assertions", + "winnow", "zbus_names", "zvariant", ] [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + [[package]] name = "zvariant" -version = "5.4.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac" +checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" dependencies = [ "endi", "enumflags2", "serde", - "static_assertions", "winnow", "zvariant_derive", "zvariant_utils", @@ -3148,27 +3126,26 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.4.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" +checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", - "syn", + "syn 2.0.119", "winnow", ] diff --git a/platforms/macos/src/node.rs b/platforms/macos/src/node.rs index 9ad3074e4..d2b5951ab 100644 --- a/platforms/macos/src/node.rs +++ b/platforms/macos/src/node.rs @@ -22,9 +22,7 @@ use objc2::{ }; use objc2_app_kit::*; use objc2_foundation::{ - NSArray, NSAttributedString, NSCopying, NSInteger, NSMutableAttributedString, - NSMutableDictionary, NSNumber, NSObject, NSObjectProtocol, NSPoint, NSRange, NSRect, NSString, - NSURL, ns_string, + NSArray, NSAttributedString, NSAttributedStringKey, NSCopying, NSInteger, NSMutableAttributedString, NSMutableDictionary, NSNumber, NSObject, NSPoint, NSRange, NSRect, NSString, NSURL, ns_string, }; use std::rc::{Rc, Weak}; @@ -378,7 +376,7 @@ define_class!( context .view .load() - .and_then(|view| unsafe { NSAccessibility::accessibilityParent(&*view) }) + .and_then(|view| NSAccessibility::accessibilityParent(&*view)) } }) .flatten() @@ -390,7 +388,7 @@ define_class!( context .view .load() - .and_then(|view| unsafe { NSAccessibility::accessibilityParent(&*view) }) + .and_then(|view| NSAccessibility::accessibilityParent(&*view)) }) .flatten() } @@ -401,7 +399,7 @@ define_class!( context .view .load() - .and_then(|view| unsafe { NSAccessibility::accessibilityParent(&*view) }) + .and_then(|view| NSAccessibility::accessibilityParent(&*view)) }) .flatten() } @@ -447,7 +445,7 @@ define_class!( node.bounding_box().map_or_else( || { if node.is_root() { - unsafe { NSAccessibility::accessibilityFrame(&*view) } + NSAccessibility::accessibilityFrame(&*view) } else { NSRect::ZERO } @@ -540,7 +538,7 @@ define_class!( #[unsafe(method(setAccessibilityValue:))] fn set_value(&self, value: &NSObject) { - if let Some(string) = downcast_ref::(value) { + if let Some(string) = value.downcast_ref::() { self.resolve_with_context(|node, tree, context| { if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { context.do_action(ActionRequest { @@ -551,7 +549,7 @@ define_class!( }); } }); - } else if let Some(number) = downcast_ref::(value) { + } else if let Some(number) = value.downcast_ref::() { self.resolve_with_context(|node, tree, context| { if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { context.do_action(ActionRequest { @@ -587,7 +585,7 @@ define_class!( self.resolve(|node| { node.supports_url().then(|| node.url()).flatten().and_then(|url| { let ns_string = NSString::from_str(url); - unsafe { NSURL::URLWithString(&ns_string) } + NSURL::URLWithString(&ns_string) }) }) .flatten() @@ -813,85 +811,85 @@ define_class!( .flatten() } - #[method_id(accessibilityAttributedStringForRange:)] - fn attributed_string_for_range(&self, range: NSRange) -> Option> { + #[unsafe(method_id(accessibilityAttributedStringForRange:))] + fn attributed_string_for_range(&self, range: NSRange) -> Option> { self.resolve(|node| { if node.supports_text_ranges() { if let Some(range) = from_ns_range(node, range) { - let mut result = NSMutableAttributedString::new(); - unsafe { result.beginEditing() }; + let result = NSMutableAttributedString::new(); + result.beginEditing(); range.traverse_text::<_, ()>(|node, text| { let ns_text = NSString::from_str(text); - let mut attrs = NSMutableDictionary::new(); + let attrs = NSMutableDictionary::::new(); if let Some(color) = node.background_color() { - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityBackgroundColorTextAttribute }, - to_color_attribute(color) + &to_color_attribute(color) ); } if let Some(color) = node.foreground_color() { - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityForegroundColorTextAttribute }, - to_color_attribute(color) + &to_color_attribute(color) ); } - let mut font_attrs = NSMutableDictionary::::new(); + let font_attrs = NSMutableDictionary::::new(); if let Some(family) = node.font_family() { - font_attrs.insert_id( + font_attrs.insert( unsafe { NSAccessibilityFontFamilyKey }, - Id::into_super(Id::into_super(NSString::from_str(family))) + &Retained::into_super(Retained::into_super(NSString::from_str(family))) ); } if let Some(size) = node.font_size() { - font_attrs.insert_id( + font_attrs.insert( unsafe { NSAccessibilityFontSizeKey }, - Id::into_super(Id::into_super(Id::into_super(NSNumber::new_f32(size)))) + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_f32(size)))) ); } if let Some(weight) = node.font_weight() { if weight >= 700.0 { - font_attrs.insert_id( + font_attrs.insert( ns_string!("AXFontBold"), - Id::into_super(Id::into_super(Id::into_super(NSNumber::new_bool(true)))) + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) ); } } if node.is_italic() { - font_attrs.insert_id( + font_attrs.insert( ns_string!("AXFontItalic"), - Id::into_super(Id::into_super(Id::into_super(NSNumber::new_bool(true)))) + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) ); } if !font_attrs.is_empty() { - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityFontTextAttribute }, - Id::into_super(Id::into_super(Id::into_super(font_attrs))) + &Retained::into_super(Retained::into_super(Retained::into_super(font_attrs))) ); } if let Some(deco) = node.underline() { - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityUnderlineTextAttribute }, - Id::into_super(Id::into_super(Id::into_super(NSNumber::new_bool(true)))) + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) ); - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityUnderlineColorTextAttribute }, - to_color_attribute(deco.color) + &to_color_attribute(deco.color) ); } if let Some(deco) = node.strikethrough() { - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityStrikethroughTextAttribute }, - Id::into_super(Id::into_super(Id::into_super(NSNumber::new_bool(true)))) + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) ); - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityStrikethroughColorTextAttribute }, - to_color_attribute(deco.color) + &to_color_attribute(deco.color) ); } if let Some(language) = node.language() { - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityLanguageTextAttribute }, - Id::into_super(Id::into_super(NSString::from_str(language))) + &Retained::into_super(Retained::into_super(NSString::from_str(language))) ); } if let Some(align) = node.text_align() { @@ -901,17 +899,17 @@ define_class!( TextAlign::Right => NSTextAlignment::Right, TextAlign::Justify => NSTextAlignment::Justified, }; - attrs.insert_id( + attrs.insert( unsafe { NSAccessibilityTextAlignmentAttribute }, - Id::into_super(Id::into_super(Id::into_super(NSNumber::new_isize(ns_align.0)))) + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_isize(ns_align.0)))) ); } let part = unsafe { NSAttributedString::new_with_attributes(&ns_text, &attrs) }; - unsafe { result.appendAttributedString(&part) }; + result.appendAttributedString(&part); None }); - unsafe { result.endEditing() }; - return Some(Id::into_super(result)); + result.endEditing(); + return Some(Retained::into_super(result)); } } None @@ -970,7 +968,7 @@ define_class!( .unwrap_or_else(|| NSRange::new(0, 0)) } - #[unsafe(method(accessibilityStyleRangeForIndex:)] + #[unsafe(method(accessibilityStyleRangeForIndex:))] fn style_range_for_index(&self, index: NSInteger) -> NSRange { self.resolve(|node| { if node.supports_text_ranges() && index >= 0 { @@ -1051,7 +1049,7 @@ define_class!( #[unsafe(method_id(accessibilityAttributeValue:))] - fn accessibility_attribute_value(&self, attr: &NSString) -> Option> { + fn accessibility_attribute_value(&self, attr: &NSString) -> Option> { self.resolve(|node| { if attr == ns_string!("AXBrailleLabel") && node.has_braille_label() { return Some(NSString::from_str(node.braille_label().unwrap())) @@ -1152,7 +1150,7 @@ define_class!( .flatten() } - #[method(isAccessibilityModal)] + #[unsafe(method(isAccessibilityModal))] fn is_modal(&self) -> bool { self.resolve(|node| node.is_modal()) .unwrap_or(false) diff --git a/platforms/macos/src/patch.rs b/platforms/macos/src/patch.rs index 9e9be3fc8..640a9a7c3 100644 --- a/platforms/macos/src/patch.rs +++ b/platforms/macos/src/patch.rs @@ -8,8 +8,8 @@ use objc2::{ encode::{Encode, EncodeArguments, EncodeReturn, Encoding}, ffi::class_addMethod, msg_send, - runtime::{AnyClass, AnyObject, Bool, MethodImplementation, Sel}, - sel, Message + runtime::{AnyClass, AnyObject, MethodImplementation, Sel}, + sel }; use objc2_app_kit::NSWindow; use std::{ffi::CString, ptr::null_mut, str::FromStr}; diff --git a/platforms/macos/src/subclass.rs b/platforms/macos/src/subclass.rs index b5b26711f..87fbb2609 100644 --- a/platforms/macos/src/subclass.rs +++ b/platforms/macos/src/subclass.rs @@ -5,7 +5,7 @@ use accesskit::{ActionHandler, ActivationHandler, TreeUpdate}; use objc2::{ - ClassType, DeclaredClass, + DeclaredClass, declare::ClassBuilder, define_class, ffi::{ @@ -15,7 +15,7 @@ use objc2::{ msg_send, rc::Retained, runtime::{AnyClass, Sel}, - sel, AnyThread, DeclaredClass, + sel, AnyThread, }; use objc2_app_kit::{NSView, NSWindow}; use objc2_foundation::{NSArray, NSObject, NSPoint}; diff --git a/platforms/macos/src/util.rs b/platforms/macos/src/util.rs index f5146a7b9..58643dff2 100644 --- a/platforms/macos/src/util.rs +++ b/platforms/macos/src/util.rs @@ -6,7 +6,8 @@ use accesskit::{Color, Point, Rect}; use accesskit_consumer::{NodeRef, TextPosition, TextRange}; use objc2::encode::{Encoding, RefEncode}; -use objc2::{msg_send, rc::Id, runtime::AnyObject}; +use objc2::rc::Retained; +use objc2::{msg_send, runtime::AnyObject}; use objc2_app_kit::*; use objc2_foundation::{NSPoint, NSRange, NSRect, NSSize}; @@ -94,15 +95,15 @@ unsafe impl RefEncode for CGColor { const ENCODING_REF: Encoding = Encoding::Pointer(&Encoding::Struct("CGColor", &[])); } -pub(crate) fn to_color_attribute(color: Color) -> Id { - let ns_color = unsafe { +pub(crate) fn to_color_attribute(color: Color) -> Retained { + let ns_color = NSColor::colorWithSRGBRed_green_blue_alpha( color_channel_to_f64(color.red), color_channel_to_f64(color.green), color_channel_to_f64(color.blue), color_channel_to_f64(color.alpha), ) - }; + ; let cg_color: *const CGColor = unsafe { msg_send![&ns_color, CGColor] }; - unsafe { Id::retain(cg_color as *mut AnyObject).unwrap() } + unsafe { Retained::retain(cg_color as *mut AnyObject).unwrap() } } From 23421ce21b17f1b626a1debd8aedb004ae9aba6f Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Aug 2026 10:22:25 +0300 Subject: [PATCH 3/7] fix post-merge issues --- Cargo.lock | 5 - platforms/macos/src/node.rs | 1324 +++++++++++++++++++++++++++++++++++ 2 files changed, 1324 insertions(+), 5 deletions(-) create mode 100644 platforms/macos/src/node.rs diff --git a/Cargo.lock b/Cargo.lock index ab63db8b8..37080bc1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,12 +108,7 @@ version = "0.34.0" dependencies = [ "accesskit", "accesskit_consumer", -<<<<<<< HEAD "hashbrown 0.16.1", - "once_cell", -======= - "hashbrown", ->>>>>>> upstream/main "parking_lot", "scopeguard", "static_assertions", diff --git a/platforms/macos/src/node.rs b/platforms/macos/src/node.rs new file mode 100644 index 000000000..d2b5951ab --- /dev/null +++ b/platforms/macos/src/node.rs @@ -0,0 +1,1324 @@ +// Copyright 2022 The AccessKit Authors. All rights reserved. +// Licensed under the Apache License, Version 2.0 (found in +// the LICENSE-APACHE file) or the MIT license (found in +// the LICENSE-MIT file), at your option. + +// Derived from Chromium's accessibility abstraction. +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE.chromium file. + +#![allow(non_upper_case_globals)] + +use accesskit::{ + Action, ActionData, ActionRequest, Orientation, Role, TextAlign, TextSelection, Toggled, +}; +use accesskit_consumer::{FilterResult, FullNodeId, NodeRef, Tree}; +use objc2::{ + define_class, msg_send, + rc::Retained, + runtime::{AnyObject, Sel}, + sel, AnyThread, DeclaredClass, +}; +use objc2_app_kit::*; +use objc2_foundation::{ + NSArray, NSAttributedString, NSAttributedStringKey, NSCopying, NSInteger, NSMutableAttributedString, NSMutableDictionary, NSNumber, NSObject, NSPoint, NSRange, NSRect, NSString, NSURL, ns_string, +}; +use std::rc::{Rc, Weak}; + +use crate::{context::Context, filters::filter, util::*}; + +const SCROLL_TO_VISIBLE_ACTION: &str = "AXScrollToVisible"; + +fn ns_role(node: &NodeRef) -> &'static NSAccessibilityRole { + let role = node.role(); + // TODO: Handle special cases. + unsafe { + match role { + Role::Unknown => NSAccessibilityUnknownRole, + Role::TextRun => NSAccessibilityUnknownRole, + Role::Cell | Role::GridCell => NSAccessibilityCellRole, + Role::Label => NSAccessibilityStaticTextRole, + Role::Image => NSAccessibilityImageRole, + Role::Link => NSAccessibilityLinkRole, + Role::Row => NSAccessibilityRowRole, + Role::ListItem => NSAccessibilityGroupRole, + Role::ListMarker => ns_string!("AXListMarker"), + Role::TreeItem => NSAccessibilityRowRole, + Role::ListBoxOption => NSAccessibilityStaticTextRole, + Role::MenuItem => NSAccessibilityMenuItemRole, + Role::MenuListOption => NSAccessibilityMenuItemRole, + Role::Paragraph => NSAccessibilityGroupRole, + Role::GenericContainer => NSAccessibilityUnknownRole, + Role::CheckBox => NSAccessibilityCheckBoxRole, + Role::RadioButton => NSAccessibilityRadioButtonRole, + Role::TextInput + | Role::SearchInput + | Role::EmailInput + | Role::NumberInput + | Role::PasswordInput + | Role::PhoneNumberInput + | Role::UrlInput => NSAccessibilityTextFieldRole, + Role::Button => { + if node.toggled().is_some() { + NSAccessibilityCheckBoxRole + } else { + NSAccessibilityButtonRole + } + } + Role::DefaultButton => NSAccessibilityButtonRole, + Role::Pane => NSAccessibilityUnknownRole, + Role::RowHeader => NSAccessibilityCellRole, + Role::ColumnHeader => NSAccessibilityCellRole, + Role::RowGroup => NSAccessibilityGroupRole, + Role::List => NSAccessibilityListRole, + Role::Table => NSAccessibilityTableRole, + Role::LayoutTableCell => NSAccessibilityGroupRole, + Role::LayoutTableRow => NSAccessibilityGroupRole, + Role::LayoutTable => NSAccessibilityGroupRole, + Role::Switch => NSAccessibilityCheckBoxRole, + Role::Menu => NSAccessibilityMenuRole, + Role::MultilineTextInput => NSAccessibilityTextAreaRole, + Role::DateInput | Role::DateTimeInput | Role::WeekInput | Role::MonthInput => { + ns_string!("AXDateField") + } + Role::TimeInput => ns_string!("AXTimeField"), + Role::Abbr => NSAccessibilityGroupRole, + Role::Alert => NSAccessibilityGroupRole, + Role::AlertDialog => NSAccessibilityWindowRole, + Role::Application => NSAccessibilityGroupRole, + Role::Article => NSAccessibilityGroupRole, + Role::Audio => NSAccessibilityGroupRole, + Role::Banner => NSAccessibilityGroupRole, + Role::Blockquote => NSAccessibilityGroupRole, + Role::Canvas => NSAccessibilityImageRole, + Role::Caption => NSAccessibilityGroupRole, + Role::Caret => NSAccessibilityUnknownRole, + Role::Code => NSAccessibilityGroupRole, + Role::ColorWell => NSAccessibilityColorWellRole, + Role::ComboBox => NSAccessibilityPopUpButtonRole, + Role::EditableComboBox => NSAccessibilityComboBoxRole, + Role::Complementary => NSAccessibilityGroupRole, + Role::Comment => NSAccessibilityGroupRole, + Role::ContentDeletion => NSAccessibilityGroupRole, + Role::ContentInsertion => NSAccessibilityGroupRole, + Role::ContentInfo => NSAccessibilityGroupRole, + Role::Definition => NSAccessibilityGroupRole, + Role::DescriptionList => NSAccessibilityListRole, + Role::Details => NSAccessibilityGroupRole, + Role::Dialog => NSAccessibilityWindowRole, + Role::DisclosureTriangle => NSAccessibilityButtonRole, + Role::Document => NSAccessibilityGroupRole, + Role::EmbeddedObject => NSAccessibilityGroupRole, + Role::Emphasis => NSAccessibilityGroupRole, + Role::Feed => NSAccessibilityUnknownRole, + Role::FigureCaption => NSAccessibilityGroupRole, + Role::Figure => NSAccessibilityGroupRole, + Role::Footer => NSAccessibilityGroupRole, + Role::Form => NSAccessibilityGroupRole, + Role::Grid => NSAccessibilityTableRole, + Role::Group => NSAccessibilityGroupRole, + Role::Header => NSAccessibilityGroupRole, + Role::Heading => ns_string!("Heading"), + Role::Iframe => NSAccessibilityGroupRole, + Role::IframePresentational => NSAccessibilityGroupRole, + Role::ImeCandidate => NSAccessibilityUnknownRole, + Role::Keyboard => NSAccessibilityUnknownRole, + Role::Legend => NSAccessibilityGroupRole, + Role::LineBreak => NSAccessibilityGroupRole, + Role::ListBox => NSAccessibilityListRole, + Role::Log => NSAccessibilityGroupRole, + Role::Main => NSAccessibilityGroupRole, + Role::Mark => NSAccessibilityGroupRole, + Role::Marquee => NSAccessibilityGroupRole, + Role::Math => NSAccessibilityGroupRole, + Role::MenuBar => NSAccessibilityMenuBarRole, + Role::MenuItemCheckBox => NSAccessibilityMenuItemRole, + Role::MenuItemRadio => NSAccessibilityMenuItemRole, + Role::MenuListPopup => NSAccessibilityMenuRole, + Role::Meter => NSAccessibilityLevelIndicatorRole, + Role::Navigation => NSAccessibilityGroupRole, + Role::Note => NSAccessibilityGroupRole, + Role::PluginObject => NSAccessibilityGroupRole, + Role::ProgressIndicator => NSAccessibilityProgressIndicatorRole, + Role::RadioGroup => NSAccessibilityRadioGroupRole, + Role::Region => NSAccessibilityGroupRole, + Role::RootWebArea => ns_string!("AXWebArea"), + Role::Ruby => NSAccessibilityGroupRole, + Role::RubyAnnotation => NSAccessibilityUnknownRole, + Role::ScrollBar => NSAccessibilityScrollBarRole, + Role::ScrollView => NSAccessibilityUnknownRole, + Role::Search => NSAccessibilityGroupRole, + Role::Section => NSAccessibilityGroupRole, + Role::SectionFooter => NSAccessibilityGroupRole, + Role::SectionHeader => NSAccessibilityGroupRole, + Role::Slider => NSAccessibilitySliderRole, + Role::SpinButton => NSAccessibilityIncrementorRole, + Role::Splitter => NSAccessibilitySplitterRole, + Role::Status => NSAccessibilityGroupRole, + Role::Strong => NSAccessibilityGroupRole, + Role::Suggestion => NSAccessibilityGroupRole, + Role::SvgRoot => NSAccessibilityGroupRole, + Role::Tab => NSAccessibilityRadioButtonRole, + Role::TabList => NSAccessibilityTabGroupRole, + Role::TabPanel => NSAccessibilityGroupRole, + Role::Term => NSAccessibilityGroupRole, + Role::Time => NSAccessibilityGroupRole, + Role::Timer => NSAccessibilityGroupRole, + Role::TitleBar => NSAccessibilityStaticTextRole, + Role::Toolbar => NSAccessibilityToolbarRole, + Role::Tooltip => NSAccessibilityGroupRole, + Role::Tree => NSAccessibilityOutlineRole, + Role::TreeGrid => NSAccessibilityTableRole, + Role::Video => NSAccessibilityGroupRole, + Role::WebView => NSAccessibilityUnknownRole, + // Use the group role for Role::Window, since the NSWindow + // provides the top-level accessibility object for the window. + Role::Window => NSAccessibilityGroupRole, + Role::PdfActionableHighlight => NSAccessibilityButtonRole, + Role::PdfRoot => NSAccessibilityGroupRole, + Role::GraphicsDocument => NSAccessibilityGroupRole, + Role::GraphicsObject => NSAccessibilityGroupRole, + Role::GraphicsSymbol => NSAccessibilityImageRole, + Role::DocAbstract => NSAccessibilityGroupRole, + Role::DocAcknowledgements => NSAccessibilityGroupRole, + Role::DocAfterword => NSAccessibilityGroupRole, + Role::DocAppendix => NSAccessibilityGroupRole, + Role::DocBackLink => NSAccessibilityLinkRole, + Role::DocBiblioEntry => NSAccessibilityGroupRole, + Role::DocBibliography => NSAccessibilityGroupRole, + Role::DocBiblioRef => NSAccessibilityGroupRole, + Role::DocChapter => NSAccessibilityGroupRole, + Role::DocColophon => NSAccessibilityGroupRole, + Role::DocConclusion => NSAccessibilityGroupRole, + Role::DocCover => NSAccessibilityImageRole, + Role::DocCredit => NSAccessibilityGroupRole, + Role::DocCredits => NSAccessibilityGroupRole, + Role::DocDedication => NSAccessibilityGroupRole, + Role::DocEndnote => NSAccessibilityGroupRole, + Role::DocEndnotes => NSAccessibilityGroupRole, + Role::DocEpigraph => NSAccessibilityGroupRole, + Role::DocEpilogue => NSAccessibilityGroupRole, + Role::DocErrata => NSAccessibilityGroupRole, + Role::DocExample => NSAccessibilityGroupRole, + Role::DocFootnote => NSAccessibilityGroupRole, + Role::DocForeword => NSAccessibilityGroupRole, + Role::DocGlossary => NSAccessibilityGroupRole, + Role::DocGlossRef => NSAccessibilityLinkRole, + Role::DocIndex => NSAccessibilityGroupRole, + Role::DocIntroduction => NSAccessibilityGroupRole, + Role::DocNoteRef => NSAccessibilityLinkRole, + Role::DocNotice => NSAccessibilityGroupRole, + Role::DocPageBreak => NSAccessibilitySplitterRole, + Role::DocPageFooter => NSAccessibilityGroupRole, + Role::DocPageHeader => NSAccessibilityGroupRole, + Role::DocPageList => NSAccessibilityGroupRole, + Role::DocPart => NSAccessibilityGroupRole, + Role::DocPreface => NSAccessibilityGroupRole, + Role::DocPrologue => NSAccessibilityGroupRole, + Role::DocPullquote => NSAccessibilityGroupRole, + Role::DocQna => NSAccessibilityGroupRole, + Role::DocSubtitle => ns_string!("AXHeading"), + Role::DocTip => NSAccessibilityGroupRole, + Role::DocToc => NSAccessibilityGroupRole, + Role::ListGrid => NSAccessibilityUnknownRole, + Role::Terminal => NSAccessibilityTextAreaRole, + } + } +} + +fn ns_sub_role(node: &NodeRef) -> &'static NSAccessibilitySubrole { + let role = node.role(); + + unsafe { + match role { + Role::Alert => ns_string!("AXApplicationAlert"), + Role::AlertDialog => NSAccessibilityDialogSubrole, + Role::Article => ns_string!("AXDocumentArticle"), + Role::Banner => ns_string!("AXLandmarkBanner"), + Role::Button if node.toggled().is_some() => NSAccessibilityToggleSubrole, + Role::Code => ns_string!("AXCodeStyleGroup"), + Role::Complementary => ns_string!("AXLandmarkComplementary"), + Role::ContentDeletion => ns_string!("AXDeleteStyleGroup"), + Role::ContentInsertion => ns_string!("AXInsertStyleGroup"), + Role::ContentInfo => ns_string!("AXLandmarkContentInfo"), + Role::Definition => ns_string!("AXDefinition"), + Role::Dialog => NSAccessibilityDialogSubrole, + Role::Document => ns_string!("AXDocument"), + Role::Emphasis => ns_string!("AXEmphasisStyleGroup"), + Role::Feed => ns_string!("AXApplicationGroup"), + Role::Footer => ns_string!("AXLandmarkContentInfo"), + Role::Form => ns_string!("AXLandmarkForm"), + Role::GraphicsDocument => ns_string!("AXDocument"), + Role::Group => ns_string!("AXApplicationGroup"), + Role::Header => ns_string!("AXLandmarkBanner"), + Role::LayoutTableCell => NSAccessibilityGroupRole, + Role::LayoutTableRow => NSAccessibilityTableRowSubrole, + Role::Log => ns_string!("AXApplicationLog"), + Role::Main => ns_string!("AXLandmarkMain"), + Role::Marquee => ns_string!("AXApplicationMarquee"), + Role::Math => ns_string!("AXDocumentMath"), + Role::Meter => ns_string!("AXMeter"), + Role::Navigation => ns_string!("AXLandmarkNavigation"), + Role::Note => ns_string!("AXDocumentNote"), + Role::PasswordInput => NSAccessibilitySecureTextFieldSubrole, + Role::Region => ns_string!("AXLandmarkRegion"), + Role::Search => ns_string!("AXLandmarkSearch"), + Role::SearchInput => NSAccessibilitySearchFieldSubrole, + Role::SectionFooter => ns_string!("AXSectionFooter"), + Role::SectionHeader => ns_string!("AXSectionHeader"), + Role::Status => ns_string!("AXApplicationStatus"), + Role::Strong => ns_string!("AXStrongStyleGroup"), + Role::Switch => NSAccessibilitySwitchSubrole, + Role::Tab => NSAccessibilityTabButtonSubrole, + Role::TabPanel => ns_string!("AXTabPanel"), + Role::Term => ns_string!("AXTerm"), + Role::Time => ns_string!("AXTimeGroup"), + Role::Timer => ns_string!("AXApplicationTimer"), + Role::TreeItem => NSAccessibilityOutlineRowSubrole, + Role::Tooltip => ns_string!("AXUserInterfaceTooltip"), + _ => NSAccessibilityUnknownSubrole, + } + } +} + +pub(crate) fn can_be_focused(node: &NodeRef) -> bool { + filter(node) == FilterResult::Include && node.role() != Role::Window +} + +#[derive(PartialEq)] +pub(crate) enum Value { + Bool(bool), + Number(f64), + String(String), +} + +pub(crate) struct NodeWrapper<'a>(pub(crate) &'a NodeRef<'a>); + +impl NodeWrapper<'_> { + fn is_root(&self) -> bool { + self.0.is_root() + } + + pub(crate) fn title(&self) -> Option { + if self.is_root() && self.0.role() == Role::Window { + // If the group element that we expose for the top-level window + // includes a title, VoiceOver behavior is broken. + return None; + } + self.0.label() + } + + pub(crate) fn description(&self) -> Option { + self.0.description() + } + + pub(crate) fn placeholder(&self) -> Option<&str> { + self.0.placeholder() + } + + pub(crate) fn value(&self) -> Option { + if let Some(toggled) = self.0.toggled() { + return Some(Value::Bool(toggled != Toggled::False)); + } + if self.0.role() == Role::Tab { + // On Mac, tabs are exposed as radio buttons, and are treated as checkable. + // Also, `Node::is_selected` is mapped to checked via `accessibilityValue`. + return Some(Value::Bool(self.0.is_selected().unwrap_or(false))); + } + if let Some(value) = self.0.value() { + return Some(Value::String(value)); + } + if let Some(value) = self.0.numeric_value() { + return Some(Value::Number(value)); + } + None + } + + pub(crate) fn supports_text_ranges(&self) -> bool { + self.0.supports_text_ranges() + } + + pub(crate) fn raw_text_selection(&self) -> Option<&TextSelection> { + self.0.raw_text_selection() + } + + fn is_container_with_selectable_children(&self) -> bool { + self.0.is_container_with_selectable_children() && self.0.role() != Role::TabList + } + + pub(crate) fn is_item_like(&self) -> bool { + self.0.is_item_like() && self.0.role() != Role::Tab + } +} + +#[derive(Debug)] +pub(crate) struct PlatformNodeIvars { + context: Weak, + node_id: FullNodeId, +} + +define_class!( + #[unsafe(super(NSAccessibilityElement))] + + #[derive(Debug)] + #[ivars = PlatformNodeIvars] + #[name = "AccessKitNode"] + pub(crate) struct PlatformNode; + + impl PlatformNode { + #[unsafe(method_id(accessibilityParent))] + fn parent(&self) -> Option> { + self.resolve_with_context(|node, _, context| { + if let Some(parent) = node.filtered_parent(&filter) { + Some(Retained::into_super(Retained::into_super(Retained::into_super(context.get_or_create_platform_node(parent.id()))))) + } else { + context + .view + .load() + .and_then(|view| NSAccessibility::accessibilityParent(&*view)) + } + }) + .flatten() + } + + #[unsafe(method_id(accessibilityWindow))] + fn window(&self) -> Option> { + self.resolve_with_context(|_, _, context| { + context + .view + .load() + .and_then(|view| NSAccessibility::accessibilityParent(&*view)) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityTopLevelUIElement))] + fn top_level(&self) -> Option> { + self.resolve_with_context(|_, _, context| { + context + .view + .load() + .and_then(|view| NSAccessibility::accessibilityParent(&*view)) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityChildren))] + fn children(&self) -> Option>> { + self.children_internal() + } + + #[unsafe(method_id(accessibilityChildrenInNavigationOrder))] + fn children_in_navigation_order(&self) -> Option>> { + // For now, we assume the children are in navigation order. + self.children_internal() + } + + #[unsafe(method_id(accessibilitySelectedChildren))] + fn selected_children(&self) -> Option>> { + self.resolve_with_context(|node, _, context| { + let wrapper = NodeWrapper(node); + if !wrapper.is_container_with_selectable_children() { + return None; + } + let platform_nodes = node + .items(filter) + .filter(|item| item.is_selected() == Some(true)) + .map(|child| context.get_or_create_platform_node(child.id())) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) + }) + .flatten() + } + + #[unsafe(method(accessibilityFrame))] + fn frame(&self) -> NSRect { + self.resolve_with_context(|node, _, context| { + let view = match context.view.load() { + Some(view) => view, + None => { + return NSRect::ZERO; + } + }; + + node.bounding_box().map_or_else( + || { + if node.is_root() { + NSAccessibility::accessibilityFrame(&*view) + } else { + NSRect::ZERO + } + }, + |rect| to_ns_rect(&view, rect), + ) + }) + .unwrap_or(NSRect::ZERO) + } + + #[unsafe(method_id(accessibilityRole))] + fn role(&self) -> Retained { + self.resolve(ns_role) + .unwrap_or(unsafe { NSAccessibilityUnknownRole }) + .copy() + } + + #[unsafe(method_id(accessibilitySubrole))] + fn sub_role(&self) -> Retained { + self.resolve(ns_sub_role) + .unwrap_or(unsafe { NSAccessibilityUnknownSubrole }) + .copy() + } + + #[unsafe(method_id(accessibilityRoleDescription))] + fn role_description(&self) -> Option> { + self.resolve(|node| { + if let Some(role_description) = node.role_description() { + Some(NSString::from_str(role_description)) + } else { + unsafe { msg_send![super(self), accessibilityRoleDescription] } + } + }) + .flatten() + } + + #[unsafe(method_id(accessibilityIdentifier))] + fn identifier(&self) -> Option> { + self.resolve(|node| { + node.author_id().map(NSString::from_str) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityTitle))] + fn title(&self) -> Option> { + self.resolve(|node| { + let wrapper = NodeWrapper(node); + wrapper.title().map(|title| NSString::from_str(&title)) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityHelp))] + fn description(&self) -> Option> { + self.resolve(|node| { + let wrapper = NodeWrapper(node); + wrapper.description().map(|description| NSString::from_str(&description)) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityPlaceholderValue))] + fn placeholder(&self) -> Option> { + self.resolve(|node| { + let wrapper = NodeWrapper(node); + wrapper.placeholder().map(NSString::from_str) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityValue))] + fn value(&self) -> Option> { + self.resolve(|node| { + let wrapper = NodeWrapper(node); + wrapper.value().map(|value| match value { + Value::Bool(value) => { + Retained::into_super(Retained::into_super(NSNumber::new_bool(value))) + } + Value::Number(value) => { + Retained::into_super(Retained::into_super(NSNumber::new_f64(value))) + } + Value::String(value) => { + Retained::into_super(NSString::from_str(&value)) + } + }) + }) + .flatten() + } + + #[unsafe(method(setAccessibilityValue:))] + fn set_value(&self, value: &NSObject) { + if let Some(string) = value.downcast_ref::() { + self.resolve_with_context(|node, tree, context| { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::SetValue, + target_tree, + target_node, + data: Some(ActionData::Value(string.to_string().into())), + }); + } + }); + } else if let Some(number) = value.downcast_ref::() { + self.resolve_with_context(|node, tree, context| { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::SetValue, + target_tree, + target_node, + data: Some(ActionData::NumericValue(number.doubleValue())), + }); + } + }); + } + } + + #[unsafe(method_id(accessibilityMinValue))] + fn min_value(&self) -> Option> { + self.resolve(|node| { + node.min_numeric_value().map(NSNumber::new_f64) + }) + .flatten() + } + + #[unsafe(method_id(accessibilityMaxValue))] + fn max_value(&self) -> Option> { + self.resolve(|node| { + node.max_numeric_value().map(NSNumber::new_f64) + }) + .flatten() + } + + + #[unsafe(method_id(accessibilityURL))] + fn url(&self) -> Option> { + self.resolve(|node| { + node.supports_url().then(|| node.url()).flatten().and_then(|url| { + let ns_string = NSString::from_str(url); + NSURL::URLWithString(&ns_string) + }) + }) + .flatten() + } + + #[unsafe(method(accessibilityOrientation))] + fn orientation(&self) -> NSAccessibilityOrientation { + self.resolve(|node| { + match node.orientation() { + Some(Orientation::Horizontal) => NSAccessibilityOrientation::Horizontal, + Some(Orientation::Vertical) => NSAccessibilityOrientation::Vertical, + None => NSAccessibilityOrientation::Unknown, + } + }) + .unwrap_or(NSAccessibilityOrientation::Unknown) + } + + #[unsafe(method(isAccessibilityElement))] + fn is_accessibility_element(&self) -> bool { + self.resolve(|node| filter(node) == FilterResult::Include) + .unwrap_or(false) + } + + #[unsafe(method(isAccessibilityFocused))] + fn is_focused(&self) -> bool { + self.resolve(|node| node.is_focused() && can_be_focused(node)) + .unwrap_or(false) + } + + #[unsafe(method(isAccessibilityEnabled))] + fn is_enabled(&self) -> bool { + self.resolve(|node| !node.is_disabled()).unwrap_or(false) + } + + #[unsafe(method(setAccessibilityFocused:))] + fn set_focused(&self, focused: bool) { + self.resolve_with_context(|node, tree, context| { + if focused { + if node.is_focusable(&filter) { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::Focus, + target_tree, + target_node, + data: None, + }); + } + } + } else { + let root = tree.state().root(); + if root.is_focusable(&filter) { + if let Some((target_node, target_tree)) = tree.state().locate_node(root.id()) { + context.do_action(ActionRequest { + action: Action::Focus, + target_tree, + target_node, + data: None, + }); + } + } + } + }); + } + + #[unsafe(method(accessibilityPerformPress))] + fn press(&self) -> bool { + self.resolve_with_context(|node, tree, context| { + let clickable = node.is_clickable(&filter); + if clickable { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::Click, + target_tree, + target_node, + data: None, + }); + } + } + clickable + }) + .unwrap_or(false) + } + + #[unsafe(method(accessibilityPerformIncrement))] + fn increment(&self) -> bool { + self.resolve_with_context(|node, tree, context| { + let supports_increment = node.supports_increment(&filter); + if supports_increment { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::Increment, + target_tree, + target_node, + data: None, + }); + } + } + supports_increment + }) + .unwrap_or(false) + } + + #[unsafe(method(accessibilityPerformDecrement))] + fn decrement(&self) -> bool { + self.resolve_with_context(|node, tree, context| { + let supports_decrement = node.supports_decrement(&filter); + if supports_decrement { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::Decrement, + target_tree, + target_node, + data: None, + }); + } + } + supports_decrement + }) + .unwrap_or(false) + } + + #[unsafe(method(accessibilityNotifiesWhenDestroyed))] + fn notifies_when_destroyed(&self) -> bool { + true + } + + #[unsafe(method(accessibilityNumberOfCharacters))] + fn number_of_characters(&self) -> NSInteger { + self.resolve(|node| { + if node.supports_text_ranges() { + node.document_range().end().to_global_utf16_index() as _ + } else { + 0 + } + }) + .unwrap_or(0) + } + + #[unsafe(method_id(accessibilitySelectedText))] + fn selected_text(&self) -> Option> { + self.resolve(|node| { + if node.supports_text_ranges() { + if let Some(range) = node.text_selection() { + let text = range.text(); + return Some(NSString::from_str(&text)); + } + } + None + }) + .flatten() + } + + #[unsafe(method(accessibilitySelectedTextRange))] + fn selected_text_range(&self) -> NSRange { + self.resolve(|node| { + if node.supports_text_ranges() { + if let Some(range) = node.text_selection() { + return to_ns_range(&range); + } + } + NSRange::new(0, 0) + }) + .unwrap_or_else(|| NSRange::new(0, 0)) + } + + #[unsafe(method(accessibilityInsertionPointLineNumber))] + fn insertion_point_line_number(&self) -> NSInteger { + self.resolve(|node| { + if node.supports_text_ranges() { + if let Some(pos) = node.text_selection_focus() { + return pos.to_line_index() as _; + } + } + 0 + }) + .unwrap_or(0) + } + + #[unsafe(method(accessibilityRangeForLine:))] + fn range_for_line(&self, line_index: NSInteger) -> NSRange { + self.resolve(|node| { + if node.supports_text_ranges() && line_index >= 0 { + if let Some(range) = node.line_range_from_index(line_index as _) { + return to_ns_range(&range); + } + } + NSRange::new(0, 0) + }) + .unwrap_or_else(|| NSRange::new(0, 0)) + } + + #[unsafe(method(accessibilityRangeForPosition:))] + fn range_for_position(&self, point: NSPoint) -> NSRange { + self.resolve_with_context(|node, _, context| { + let view = match context.view.load() { + Some(view) => view, + None => { + return NSRange::new(0, 0); + } + }; + + if node.supports_text_ranges() { + let point = from_ns_point(&view, node, point); + let pos = node.text_position_at_point(point); + return to_ns_range_for_character(&pos); + } + NSRange::new(0, 0) + }) + .unwrap_or_else(|| NSRange::new(0, 0)) + } + + #[unsafe(method_id(accessibilityStringForRange:))] + fn string_for_range(&self, range: NSRange) -> Option> { + self.resolve(|node| { + if node.supports_text_ranges() { + if let Some(range) = from_ns_range(node, range) { + let text = range.text(); + return Some(NSString::from_str(&text)); + } + } + None + }) + .flatten() + } + + #[unsafe(method_id(accessibilityAttributedStringForRange:))] + fn attributed_string_for_range(&self, range: NSRange) -> Option> { + self.resolve(|node| { + if node.supports_text_ranges() { + if let Some(range) = from_ns_range(node, range) { + let result = NSMutableAttributedString::new(); + result.beginEditing(); + range.traverse_text::<_, ()>(|node, text| { + let ns_text = NSString::from_str(text); + let attrs = NSMutableDictionary::::new(); + if let Some(color) = node.background_color() { + attrs.insert( + unsafe { NSAccessibilityBackgroundColorTextAttribute }, + &to_color_attribute(color) + ); + } + if let Some(color) = node.foreground_color() { + attrs.insert( + unsafe { NSAccessibilityForegroundColorTextAttribute }, + &to_color_attribute(color) + ); + } + let font_attrs = NSMutableDictionary::::new(); + if let Some(family) = node.font_family() { + font_attrs.insert( + unsafe { NSAccessibilityFontFamilyKey }, + &Retained::into_super(Retained::into_super(NSString::from_str(family))) + ); + } + if let Some(size) = node.font_size() { + font_attrs.insert( + unsafe { NSAccessibilityFontSizeKey }, + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_f32(size)))) + ); + } + if let Some(weight) = node.font_weight() { + if weight >= 700.0 { + font_attrs.insert( + ns_string!("AXFontBold"), + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) + ); + } + } + if node.is_italic() { + font_attrs.insert( + ns_string!("AXFontItalic"), + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) + ); + } + if !font_attrs.is_empty() { + attrs.insert( + unsafe { NSAccessibilityFontTextAttribute }, + &Retained::into_super(Retained::into_super(Retained::into_super(font_attrs))) + ); + } + if let Some(deco) = node.underline() { + attrs.insert( + unsafe { NSAccessibilityUnderlineTextAttribute }, + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) + ); + attrs.insert( + unsafe { NSAccessibilityUnderlineColorTextAttribute }, + &to_color_attribute(deco.color) + ); + } + if let Some(deco) = node.strikethrough() { + attrs.insert( + unsafe { NSAccessibilityStrikethroughTextAttribute }, + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) + ); + attrs.insert( + unsafe { NSAccessibilityStrikethroughColorTextAttribute }, + &to_color_attribute(deco.color) + ); + } + if let Some(language) = node.language() { + attrs.insert( + unsafe { NSAccessibilityLanguageTextAttribute }, + &Retained::into_super(Retained::into_super(NSString::from_str(language))) + ); + } + if let Some(align) = node.text_align() { + let ns_align = match align { + TextAlign::Left => NSTextAlignment::Left, + TextAlign::Center => NSTextAlignment::Center, + TextAlign::Right => NSTextAlignment::Right, + TextAlign::Justify => NSTextAlignment::Justified, + }; + attrs.insert( + unsafe { NSAccessibilityTextAlignmentAttribute }, + &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_isize(ns_align.0)))) + ); + } + let part = unsafe { NSAttributedString::new_with_attributes(&ns_text, &attrs) }; + result.appendAttributedString(&part); + None + }); + result.endEditing(); + return Some(Retained::into_super(result)); + } + } + None + }) + .flatten() + } + + #[unsafe(method(accessibilityFrameForRange:))] + fn frame_for_range(&self, range: NSRange) -> NSRect { + self.resolve_with_context(|node, _, context| { + let view = match context.view.load() { + Some(view) => view, + None => { + return NSRect::ZERO; + } + }; + + if node.supports_text_ranges() { + if let Some(range) = from_ns_range(node, range) { + let rects = range.bounding_boxes(); + if let Some(rect) = + rects.into_iter().reduce(|rect1, rect2| rect1.union(rect2)) + { + return to_ns_rect(&view, rect); + } + } + } + NSRect::ZERO + }) + .unwrap_or(NSRect::ZERO) + } + + #[unsafe(method(accessibilityLineForIndex:))] + fn line_for_index(&self, index: NSInteger) -> NSInteger { + self.resolve(|node| { + if node.supports_text_ranges() && index >= 0 { + if let Some(pos) = node.text_position_from_global_utf16_index(index as _) { + return pos.to_line_index() as _; + } + } + 0 + }) + .unwrap_or(0) + } + + #[unsafe(method(accessibilityRangeForIndex:))] + fn range_for_index(&self, index: NSInteger) -> NSRange { + self.resolve(|node| { + if node.supports_text_ranges() && index >= 0 { + if let Some(pos) = node.text_position_from_global_utf16_index(index as _) { + return to_ns_range_for_character(&pos); + } + } + NSRange::new(0, 0) + }) + .unwrap_or_else(|| NSRange::new(0, 0)) + } + + #[unsafe(method(accessibilityStyleRangeForIndex:))] + fn style_range_for_index(&self, index: NSInteger) -> NSRange { + self.resolve(|node| { + if node.supports_text_ranges() && index >= 0 { + if let Some(pos) = node.text_position_from_global_utf16_index(index as _) { + let start = if pos.is_format_start() { + pos + } else { + pos.backward_to_format_start() + }; + let mut range = start.to_degenerate_range(); + range.set_end(pos.forward_to_format_end()); + return to_ns_range(&range); + } + } + NSRange::new(0, 0) + }) + .unwrap_or_else(|| NSRange::new(0, 0)) + } + + #[unsafe(method(setAccessibilitySelectedTextRange:))] + fn set_selected_text_range(&self, range: NSRange) { + self.resolve_with_context(|node, tree, context| { + if node.supports_text_ranges() { + if let Some(range) = from_ns_range(node, range) { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::SetTextSelection, + target_tree, + target_node, + data: Some(ActionData::SetTextSelection(range.to_text_selection())), + }); + } + } + } + }); + } + + #[unsafe(method(isAccessibilityRequired))] + fn is_required(&self) -> bool { + self.resolve(|node| node.is_required()) + .unwrap_or(false) + } + + #[unsafe(method(isAccessibilitySelected))] + fn is_selected(&self) -> bool { + self.resolve(|node| { + let wrapper = NodeWrapper(node); + wrapper.is_item_like() + && node.is_selectable() + && node.is_selected().unwrap_or(false) + }) + .unwrap_or(false) + } + + #[unsafe(method(setAccessibilitySelected:))] + fn set_selected(&self, selected: bool) { + self.resolve_with_context(|node, tree, context| { + let wrapper = NodeWrapper(node); + if !node.is_clickable(&filter) + || !wrapper.is_item_like() + || !node.is_selectable() + { + return; + } + if node.is_selected() == Some(selected) { + return; + } + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::Click, + target_tree, + target_node, + data: None, + }); + } + }); + } + + + #[unsafe(method_id(accessibilityAttributeValue:))] + fn accessibility_attribute_value(&self, attr: &NSString) -> Option> { + self.resolve(|node| { + if attr == ns_string!("AXBrailleLabel") && node.has_braille_label() { + return Some(NSString::from_str(node.braille_label().unwrap())) + } else if attr == ns_string!("AXBrailleRoleDescription") && node.has_braille_role_description() { + return Some(NSString::from_str(node.braille_role_description().unwrap())) + } + + None + }) + .flatten() + } + + #[unsafe(method_id(accessibilityRows))] + fn rows(&self) -> Option>> { + self.resolve_with_context(|node, _, context| { + let wrapper = NodeWrapper(node); + if !wrapper.is_container_with_selectable_children() { + return None; + } + let platform_nodes = node + .items(filter) + .map(|child| context.get_or_create_platform_node(child.id())) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) + }) + .flatten() + } + + #[unsafe(method_id(accessibilitySelectedRows))] + fn selected_rows(&self) -> Option>> { + self.resolve_with_context(|node, _, context| { + let wrapper = NodeWrapper(node); + if !wrapper.is_container_with_selectable_children() { + return None; + } + let platform_nodes = node + .items(filter) + .filter(|item| item.is_selected() == Some(true)) + .map(|child| context.get_or_create_platform_node(child.id())) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) + }) + .flatten() + } + + #[unsafe(method(accessibilityPerformPick))] + fn pick(&self) -> bool { + self.resolve_with_context(|node, tree, context| { + let wrapper = NodeWrapper(node); + let selectable = node.is_clickable(&filter) + && wrapper.is_item_like() + && node.is_selectable(); + if selectable { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::Click, + target_tree, + target_node, + data: None, + }); + } + } + selectable + }) + .unwrap_or(false) + } + + #[unsafe(method_id(accessibilityLinkedUIElements))] + fn linked_ui_elements(&self) -> Option>> { + self.resolve_with_context(|node, _, context| { + let platform_nodes: Vec> = node + .controls() + .filter(|controlled| filter(controlled) == FilterResult::Include) + .map(|controlled| context.get_or_create_platform_node(controlled.id())) + .collect(); + if platform_nodes.is_empty() { + None + } else { + Some(NSArray::from_retained_slice(&platform_nodes)) + } + }) + .flatten() + } + + #[unsafe(method_id(accessibilityTabs))] + fn tabs(&self) -> Option>> { + self.resolve_with_context(|node, _, context| { + if node.role() != Role::TabList { + return None; + } + let platform_nodes = node + .filtered_children(filter) + .filter(|child| child.role() == Role::Tab) + .map(|tab| context.get_or_create_platform_node(tab.id())) + .collect::>>(); + Some(NSArray::from_retained_slice(&platform_nodes)) + }) + .flatten() + } + + #[unsafe(method(isAccessibilityModal))] + fn is_modal(&self) -> bool { + self.resolve(|node| node.is_modal()) + .unwrap_or(false) + } + + // We discovered through experimentation that when mixing the newer + // NSAccessibility protocols with the older informal protocol, + // the platform uses both protocols to discover which actions are + // available and then perform actions. That means our implementation + // of the legacy methods below only needs to cover actions not already + // handled by the newer methods. + + #[unsafe(method_id(accessibilityActionNames))] + fn action_names(&self) -> Retained> { + let mut result = vec![]; + self.resolve(|node| { + if node.supports_action(Action::ScrollIntoView, &filter) { + result.push(ns_string!(SCROLL_TO_VISIBLE_ACTION).copy()); + } + }); + NSArray::from_retained_slice(&result) + } + + #[unsafe(method(accessibilityPerformAction:))] + fn perform_action(&self, action: &NSString) { + self.resolve_with_context(|node, tree, context| { + if action == ns_string!(SCROLL_TO_VISIBLE_ACTION) { + if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { + context.do_action(ActionRequest { + action: Action::ScrollIntoView, + target_tree, + target_node, + data: None, + }); + } + } + }); + } + + #[unsafe(method(isAccessibilitySelectorAllowed:))] + fn is_selector_allowed(&self, selector: Sel) -> bool { + self.resolve(|node| { + if selector == sel!(setAccessibilityFocused:) { + return node.is_focusable(&filter); + } + if selector == sel!(accessibilityPerformPress) { + return node.is_clickable(&filter); + } + if selector == sel!(accessibilityPerformIncrement) { + return node.supports_increment(&filter); + } + if selector == sel!(accessibilityPerformDecrement) { + return node.supports_decrement(&filter); + } + if selector == sel!(accessibilityNumberOfCharacters) + || selector == sel!(accessibilitySelectedText) + || selector == sel!(accessibilitySelectedTextRange) + || selector == sel!(accessibilityInsertionPointLineNumber) + || selector == sel!(accessibilityRangeForLine:) + || selector == sel!(accessibilityRangeForPosition:) + || selector == sel!(accessibilityStringForRange:) + || selector == sel!(accessibilityAttributedStringForRange:) + || selector == sel!(accessibilityFrameForRange:) + || selector == sel!(accessibilityLineForIndex:) + || selector == sel!(accessibilityRangeForIndex:) + || selector == sel!(accessibilityStyleRangeForIndex:) + || selector == sel!(setAccessibilitySelectedTextRange:) + { + return node.supports_text_ranges(); + } + if selector == sel!(setAccessibilityValue:) { + return (node.supports_text_ranges() && !node.is_read_only()) || node.supports_action(Action::SetValue, &filter); + } + if selector == sel!(isAccessibilitySelected) { + let wrapper = NodeWrapper(node); + return wrapper.is_item_like(); + } + if selector == sel!(accessibilityRows) + || selector == sel!(accessibilitySelectedRows) + { + let wrapper = NodeWrapper(node); + return wrapper.is_container_with_selectable_children() + } + if selector == sel!(setAccessibilitySelected:) + || selector == sel!(accessibilityPerformPick) + { + let wrapper = NodeWrapper(node); + return node.is_clickable(&filter) + && wrapper.is_item_like() + && node.is_selectable(); + } + if selector == sel!(accessibilityTabs) { + return node.role() == Role::TabList; + } + if selector == sel!(isAccessibilityModal) { + return node.is_dialog(); + } + if selector == sel!(accessibilityAttributeValue:) { + return node.has_braille_label() || node.has_braille_role_description() + } + if selector == sel!(accessibilityURL) { + return node.supports_url(); + } + selector == sel!(accessibilityParent) + || selector == sel!(accessibilityChildren) + || selector == sel!(accessibilityChildrenInNavigationOrder) + || selector == sel!(accessibilitySelectedChildren) + || selector == sel!(accessibilityFrame) + || selector == sel!(accessibilityRole) + || selector == sel!(accessibilitySubrole) + || selector == sel!(isAccessibilityEnabled) + || selector == sel!(accessibilityWindow) + || selector == sel!(accessibilityTopLevelUIElement) + || selector == sel!(accessibilityLinkedUIElements) + || selector == sel!(accessibilityRoleDescription) + || selector == sel!(accessibilityIdentifier) + || selector == sel!(accessibilityTitle) + || selector == sel!(accessibilityHelp) + || selector == sel!(accessibilityPlaceholderValue) + || selector == sel!(accessibilityValue) + || selector == sel!(accessibilityMinValue) + || selector == sel!(accessibilityMaxValue) + || selector == sel!(isAccessibilityRequired) + || selector == sel!(accessibilityOrientation) + || selector == sel!(isAccessibilityElement) + || selector == sel!(isAccessibilityFocused) + || selector == sel!(accessibilityNotifiesWhenDestroyed) + || selector == sel!(isAccessibilitySelectorAllowed:) + || selector == sel!(accessibilityActionNames) + || selector == sel!(accessibilityPerformAction:) + }) + .unwrap_or(false) + } + } +); + +impl PlatformNode { + pub(crate) fn new(context: Weak, node_id: FullNodeId) -> Retained { + let this = Self::alloc().set_ivars(PlatformNodeIvars { context, node_id }); + + unsafe { msg_send![super(this), init] } + } + + fn resolve_with_context(&self, f: F) -> Option + where + F: FnOnce(&NodeRef, &Tree, &Rc) -> T, + { + let context = self.ivars().context.upgrade()?; + let tree = context.tree.borrow(); + let state = tree.state(); + let node = state.node_by_id(self.ivars().node_id)?; + Some(f(&node, &tree, &context)) + } + + fn resolve(&self, f: F) -> Option + where + F: FnOnce(&NodeRef) -> T, + { + self.resolve_with_context(|node, _, _| f(node)) + } + + fn children_internal(&self) -> Option>> { + self.resolve_with_context(|node, _, context| { + let platform_nodes = node + .filtered_children(filter) + .map(|child| context.get_or_create_platform_node(child.id())) + .collect::>>(); + NSArray::from_retained_slice(&platform_nodes) + }) + } +} From edf675e8ce19a16b98fa3d866e86f107dcb37291 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Aug 2026 10:23:48 +0300 Subject: [PATCH 4/7] remove old node.rs --- platforms/macos/src/node.rs | 1324 ----------------------------------- 1 file changed, 1324 deletions(-) delete mode 100644 platforms/macos/src/node.rs diff --git a/platforms/macos/src/node.rs b/platforms/macos/src/node.rs deleted file mode 100644 index d2b5951ab..000000000 --- a/platforms/macos/src/node.rs +++ /dev/null @@ -1,1324 +0,0 @@ -// Copyright 2022 The AccessKit Authors. All rights reserved. -// Licensed under the Apache License, Version 2.0 (found in -// the LICENSE-APACHE file) or the MIT license (found in -// the LICENSE-MIT file), at your option. - -// Derived from Chromium's accessibility abstraction. -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE.chromium file. - -#![allow(non_upper_case_globals)] - -use accesskit::{ - Action, ActionData, ActionRequest, Orientation, Role, TextAlign, TextSelection, Toggled, -}; -use accesskit_consumer::{FilterResult, FullNodeId, NodeRef, Tree}; -use objc2::{ - define_class, msg_send, - rc::Retained, - runtime::{AnyObject, Sel}, - sel, AnyThread, DeclaredClass, -}; -use objc2_app_kit::*; -use objc2_foundation::{ - NSArray, NSAttributedString, NSAttributedStringKey, NSCopying, NSInteger, NSMutableAttributedString, NSMutableDictionary, NSNumber, NSObject, NSPoint, NSRange, NSRect, NSString, NSURL, ns_string, -}; -use std::rc::{Rc, Weak}; - -use crate::{context::Context, filters::filter, util::*}; - -const SCROLL_TO_VISIBLE_ACTION: &str = "AXScrollToVisible"; - -fn ns_role(node: &NodeRef) -> &'static NSAccessibilityRole { - let role = node.role(); - // TODO: Handle special cases. - unsafe { - match role { - Role::Unknown => NSAccessibilityUnknownRole, - Role::TextRun => NSAccessibilityUnknownRole, - Role::Cell | Role::GridCell => NSAccessibilityCellRole, - Role::Label => NSAccessibilityStaticTextRole, - Role::Image => NSAccessibilityImageRole, - Role::Link => NSAccessibilityLinkRole, - Role::Row => NSAccessibilityRowRole, - Role::ListItem => NSAccessibilityGroupRole, - Role::ListMarker => ns_string!("AXListMarker"), - Role::TreeItem => NSAccessibilityRowRole, - Role::ListBoxOption => NSAccessibilityStaticTextRole, - Role::MenuItem => NSAccessibilityMenuItemRole, - Role::MenuListOption => NSAccessibilityMenuItemRole, - Role::Paragraph => NSAccessibilityGroupRole, - Role::GenericContainer => NSAccessibilityUnknownRole, - Role::CheckBox => NSAccessibilityCheckBoxRole, - Role::RadioButton => NSAccessibilityRadioButtonRole, - Role::TextInput - | Role::SearchInput - | Role::EmailInput - | Role::NumberInput - | Role::PasswordInput - | Role::PhoneNumberInput - | Role::UrlInput => NSAccessibilityTextFieldRole, - Role::Button => { - if node.toggled().is_some() { - NSAccessibilityCheckBoxRole - } else { - NSAccessibilityButtonRole - } - } - Role::DefaultButton => NSAccessibilityButtonRole, - Role::Pane => NSAccessibilityUnknownRole, - Role::RowHeader => NSAccessibilityCellRole, - Role::ColumnHeader => NSAccessibilityCellRole, - Role::RowGroup => NSAccessibilityGroupRole, - Role::List => NSAccessibilityListRole, - Role::Table => NSAccessibilityTableRole, - Role::LayoutTableCell => NSAccessibilityGroupRole, - Role::LayoutTableRow => NSAccessibilityGroupRole, - Role::LayoutTable => NSAccessibilityGroupRole, - Role::Switch => NSAccessibilityCheckBoxRole, - Role::Menu => NSAccessibilityMenuRole, - Role::MultilineTextInput => NSAccessibilityTextAreaRole, - Role::DateInput | Role::DateTimeInput | Role::WeekInput | Role::MonthInput => { - ns_string!("AXDateField") - } - Role::TimeInput => ns_string!("AXTimeField"), - Role::Abbr => NSAccessibilityGroupRole, - Role::Alert => NSAccessibilityGroupRole, - Role::AlertDialog => NSAccessibilityWindowRole, - Role::Application => NSAccessibilityGroupRole, - Role::Article => NSAccessibilityGroupRole, - Role::Audio => NSAccessibilityGroupRole, - Role::Banner => NSAccessibilityGroupRole, - Role::Blockquote => NSAccessibilityGroupRole, - Role::Canvas => NSAccessibilityImageRole, - Role::Caption => NSAccessibilityGroupRole, - Role::Caret => NSAccessibilityUnknownRole, - Role::Code => NSAccessibilityGroupRole, - Role::ColorWell => NSAccessibilityColorWellRole, - Role::ComboBox => NSAccessibilityPopUpButtonRole, - Role::EditableComboBox => NSAccessibilityComboBoxRole, - Role::Complementary => NSAccessibilityGroupRole, - Role::Comment => NSAccessibilityGroupRole, - Role::ContentDeletion => NSAccessibilityGroupRole, - Role::ContentInsertion => NSAccessibilityGroupRole, - Role::ContentInfo => NSAccessibilityGroupRole, - Role::Definition => NSAccessibilityGroupRole, - Role::DescriptionList => NSAccessibilityListRole, - Role::Details => NSAccessibilityGroupRole, - Role::Dialog => NSAccessibilityWindowRole, - Role::DisclosureTriangle => NSAccessibilityButtonRole, - Role::Document => NSAccessibilityGroupRole, - Role::EmbeddedObject => NSAccessibilityGroupRole, - Role::Emphasis => NSAccessibilityGroupRole, - Role::Feed => NSAccessibilityUnknownRole, - Role::FigureCaption => NSAccessibilityGroupRole, - Role::Figure => NSAccessibilityGroupRole, - Role::Footer => NSAccessibilityGroupRole, - Role::Form => NSAccessibilityGroupRole, - Role::Grid => NSAccessibilityTableRole, - Role::Group => NSAccessibilityGroupRole, - Role::Header => NSAccessibilityGroupRole, - Role::Heading => ns_string!("Heading"), - Role::Iframe => NSAccessibilityGroupRole, - Role::IframePresentational => NSAccessibilityGroupRole, - Role::ImeCandidate => NSAccessibilityUnknownRole, - Role::Keyboard => NSAccessibilityUnknownRole, - Role::Legend => NSAccessibilityGroupRole, - Role::LineBreak => NSAccessibilityGroupRole, - Role::ListBox => NSAccessibilityListRole, - Role::Log => NSAccessibilityGroupRole, - Role::Main => NSAccessibilityGroupRole, - Role::Mark => NSAccessibilityGroupRole, - Role::Marquee => NSAccessibilityGroupRole, - Role::Math => NSAccessibilityGroupRole, - Role::MenuBar => NSAccessibilityMenuBarRole, - Role::MenuItemCheckBox => NSAccessibilityMenuItemRole, - Role::MenuItemRadio => NSAccessibilityMenuItemRole, - Role::MenuListPopup => NSAccessibilityMenuRole, - Role::Meter => NSAccessibilityLevelIndicatorRole, - Role::Navigation => NSAccessibilityGroupRole, - Role::Note => NSAccessibilityGroupRole, - Role::PluginObject => NSAccessibilityGroupRole, - Role::ProgressIndicator => NSAccessibilityProgressIndicatorRole, - Role::RadioGroup => NSAccessibilityRadioGroupRole, - Role::Region => NSAccessibilityGroupRole, - Role::RootWebArea => ns_string!("AXWebArea"), - Role::Ruby => NSAccessibilityGroupRole, - Role::RubyAnnotation => NSAccessibilityUnknownRole, - Role::ScrollBar => NSAccessibilityScrollBarRole, - Role::ScrollView => NSAccessibilityUnknownRole, - Role::Search => NSAccessibilityGroupRole, - Role::Section => NSAccessibilityGroupRole, - Role::SectionFooter => NSAccessibilityGroupRole, - Role::SectionHeader => NSAccessibilityGroupRole, - Role::Slider => NSAccessibilitySliderRole, - Role::SpinButton => NSAccessibilityIncrementorRole, - Role::Splitter => NSAccessibilitySplitterRole, - Role::Status => NSAccessibilityGroupRole, - Role::Strong => NSAccessibilityGroupRole, - Role::Suggestion => NSAccessibilityGroupRole, - Role::SvgRoot => NSAccessibilityGroupRole, - Role::Tab => NSAccessibilityRadioButtonRole, - Role::TabList => NSAccessibilityTabGroupRole, - Role::TabPanel => NSAccessibilityGroupRole, - Role::Term => NSAccessibilityGroupRole, - Role::Time => NSAccessibilityGroupRole, - Role::Timer => NSAccessibilityGroupRole, - Role::TitleBar => NSAccessibilityStaticTextRole, - Role::Toolbar => NSAccessibilityToolbarRole, - Role::Tooltip => NSAccessibilityGroupRole, - Role::Tree => NSAccessibilityOutlineRole, - Role::TreeGrid => NSAccessibilityTableRole, - Role::Video => NSAccessibilityGroupRole, - Role::WebView => NSAccessibilityUnknownRole, - // Use the group role for Role::Window, since the NSWindow - // provides the top-level accessibility object for the window. - Role::Window => NSAccessibilityGroupRole, - Role::PdfActionableHighlight => NSAccessibilityButtonRole, - Role::PdfRoot => NSAccessibilityGroupRole, - Role::GraphicsDocument => NSAccessibilityGroupRole, - Role::GraphicsObject => NSAccessibilityGroupRole, - Role::GraphicsSymbol => NSAccessibilityImageRole, - Role::DocAbstract => NSAccessibilityGroupRole, - Role::DocAcknowledgements => NSAccessibilityGroupRole, - Role::DocAfterword => NSAccessibilityGroupRole, - Role::DocAppendix => NSAccessibilityGroupRole, - Role::DocBackLink => NSAccessibilityLinkRole, - Role::DocBiblioEntry => NSAccessibilityGroupRole, - Role::DocBibliography => NSAccessibilityGroupRole, - Role::DocBiblioRef => NSAccessibilityGroupRole, - Role::DocChapter => NSAccessibilityGroupRole, - Role::DocColophon => NSAccessibilityGroupRole, - Role::DocConclusion => NSAccessibilityGroupRole, - Role::DocCover => NSAccessibilityImageRole, - Role::DocCredit => NSAccessibilityGroupRole, - Role::DocCredits => NSAccessibilityGroupRole, - Role::DocDedication => NSAccessibilityGroupRole, - Role::DocEndnote => NSAccessibilityGroupRole, - Role::DocEndnotes => NSAccessibilityGroupRole, - Role::DocEpigraph => NSAccessibilityGroupRole, - Role::DocEpilogue => NSAccessibilityGroupRole, - Role::DocErrata => NSAccessibilityGroupRole, - Role::DocExample => NSAccessibilityGroupRole, - Role::DocFootnote => NSAccessibilityGroupRole, - Role::DocForeword => NSAccessibilityGroupRole, - Role::DocGlossary => NSAccessibilityGroupRole, - Role::DocGlossRef => NSAccessibilityLinkRole, - Role::DocIndex => NSAccessibilityGroupRole, - Role::DocIntroduction => NSAccessibilityGroupRole, - Role::DocNoteRef => NSAccessibilityLinkRole, - Role::DocNotice => NSAccessibilityGroupRole, - Role::DocPageBreak => NSAccessibilitySplitterRole, - Role::DocPageFooter => NSAccessibilityGroupRole, - Role::DocPageHeader => NSAccessibilityGroupRole, - Role::DocPageList => NSAccessibilityGroupRole, - Role::DocPart => NSAccessibilityGroupRole, - Role::DocPreface => NSAccessibilityGroupRole, - Role::DocPrologue => NSAccessibilityGroupRole, - Role::DocPullquote => NSAccessibilityGroupRole, - Role::DocQna => NSAccessibilityGroupRole, - Role::DocSubtitle => ns_string!("AXHeading"), - Role::DocTip => NSAccessibilityGroupRole, - Role::DocToc => NSAccessibilityGroupRole, - Role::ListGrid => NSAccessibilityUnknownRole, - Role::Terminal => NSAccessibilityTextAreaRole, - } - } -} - -fn ns_sub_role(node: &NodeRef) -> &'static NSAccessibilitySubrole { - let role = node.role(); - - unsafe { - match role { - Role::Alert => ns_string!("AXApplicationAlert"), - Role::AlertDialog => NSAccessibilityDialogSubrole, - Role::Article => ns_string!("AXDocumentArticle"), - Role::Banner => ns_string!("AXLandmarkBanner"), - Role::Button if node.toggled().is_some() => NSAccessibilityToggleSubrole, - Role::Code => ns_string!("AXCodeStyleGroup"), - Role::Complementary => ns_string!("AXLandmarkComplementary"), - Role::ContentDeletion => ns_string!("AXDeleteStyleGroup"), - Role::ContentInsertion => ns_string!("AXInsertStyleGroup"), - Role::ContentInfo => ns_string!("AXLandmarkContentInfo"), - Role::Definition => ns_string!("AXDefinition"), - Role::Dialog => NSAccessibilityDialogSubrole, - Role::Document => ns_string!("AXDocument"), - Role::Emphasis => ns_string!("AXEmphasisStyleGroup"), - Role::Feed => ns_string!("AXApplicationGroup"), - Role::Footer => ns_string!("AXLandmarkContentInfo"), - Role::Form => ns_string!("AXLandmarkForm"), - Role::GraphicsDocument => ns_string!("AXDocument"), - Role::Group => ns_string!("AXApplicationGroup"), - Role::Header => ns_string!("AXLandmarkBanner"), - Role::LayoutTableCell => NSAccessibilityGroupRole, - Role::LayoutTableRow => NSAccessibilityTableRowSubrole, - Role::Log => ns_string!("AXApplicationLog"), - Role::Main => ns_string!("AXLandmarkMain"), - Role::Marquee => ns_string!("AXApplicationMarquee"), - Role::Math => ns_string!("AXDocumentMath"), - Role::Meter => ns_string!("AXMeter"), - Role::Navigation => ns_string!("AXLandmarkNavigation"), - Role::Note => ns_string!("AXDocumentNote"), - Role::PasswordInput => NSAccessibilitySecureTextFieldSubrole, - Role::Region => ns_string!("AXLandmarkRegion"), - Role::Search => ns_string!("AXLandmarkSearch"), - Role::SearchInput => NSAccessibilitySearchFieldSubrole, - Role::SectionFooter => ns_string!("AXSectionFooter"), - Role::SectionHeader => ns_string!("AXSectionHeader"), - Role::Status => ns_string!("AXApplicationStatus"), - Role::Strong => ns_string!("AXStrongStyleGroup"), - Role::Switch => NSAccessibilitySwitchSubrole, - Role::Tab => NSAccessibilityTabButtonSubrole, - Role::TabPanel => ns_string!("AXTabPanel"), - Role::Term => ns_string!("AXTerm"), - Role::Time => ns_string!("AXTimeGroup"), - Role::Timer => ns_string!("AXApplicationTimer"), - Role::TreeItem => NSAccessibilityOutlineRowSubrole, - Role::Tooltip => ns_string!("AXUserInterfaceTooltip"), - _ => NSAccessibilityUnknownSubrole, - } - } -} - -pub(crate) fn can_be_focused(node: &NodeRef) -> bool { - filter(node) == FilterResult::Include && node.role() != Role::Window -} - -#[derive(PartialEq)] -pub(crate) enum Value { - Bool(bool), - Number(f64), - String(String), -} - -pub(crate) struct NodeWrapper<'a>(pub(crate) &'a NodeRef<'a>); - -impl NodeWrapper<'_> { - fn is_root(&self) -> bool { - self.0.is_root() - } - - pub(crate) fn title(&self) -> Option { - if self.is_root() && self.0.role() == Role::Window { - // If the group element that we expose for the top-level window - // includes a title, VoiceOver behavior is broken. - return None; - } - self.0.label() - } - - pub(crate) fn description(&self) -> Option { - self.0.description() - } - - pub(crate) fn placeholder(&self) -> Option<&str> { - self.0.placeholder() - } - - pub(crate) fn value(&self) -> Option { - if let Some(toggled) = self.0.toggled() { - return Some(Value::Bool(toggled != Toggled::False)); - } - if self.0.role() == Role::Tab { - // On Mac, tabs are exposed as radio buttons, and are treated as checkable. - // Also, `Node::is_selected` is mapped to checked via `accessibilityValue`. - return Some(Value::Bool(self.0.is_selected().unwrap_or(false))); - } - if let Some(value) = self.0.value() { - return Some(Value::String(value)); - } - if let Some(value) = self.0.numeric_value() { - return Some(Value::Number(value)); - } - None - } - - pub(crate) fn supports_text_ranges(&self) -> bool { - self.0.supports_text_ranges() - } - - pub(crate) fn raw_text_selection(&self) -> Option<&TextSelection> { - self.0.raw_text_selection() - } - - fn is_container_with_selectable_children(&self) -> bool { - self.0.is_container_with_selectable_children() && self.0.role() != Role::TabList - } - - pub(crate) fn is_item_like(&self) -> bool { - self.0.is_item_like() && self.0.role() != Role::Tab - } -} - -#[derive(Debug)] -pub(crate) struct PlatformNodeIvars { - context: Weak, - node_id: FullNodeId, -} - -define_class!( - #[unsafe(super(NSAccessibilityElement))] - - #[derive(Debug)] - #[ivars = PlatformNodeIvars] - #[name = "AccessKitNode"] - pub(crate) struct PlatformNode; - - impl PlatformNode { - #[unsafe(method_id(accessibilityParent))] - fn parent(&self) -> Option> { - self.resolve_with_context(|node, _, context| { - if let Some(parent) = node.filtered_parent(&filter) { - Some(Retained::into_super(Retained::into_super(Retained::into_super(context.get_or_create_platform_node(parent.id()))))) - } else { - context - .view - .load() - .and_then(|view| NSAccessibility::accessibilityParent(&*view)) - } - }) - .flatten() - } - - #[unsafe(method_id(accessibilityWindow))] - fn window(&self) -> Option> { - self.resolve_with_context(|_, _, context| { - context - .view - .load() - .and_then(|view| NSAccessibility::accessibilityParent(&*view)) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityTopLevelUIElement))] - fn top_level(&self) -> Option> { - self.resolve_with_context(|_, _, context| { - context - .view - .load() - .and_then(|view| NSAccessibility::accessibilityParent(&*view)) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityChildren))] - fn children(&self) -> Option>> { - self.children_internal() - } - - #[unsafe(method_id(accessibilityChildrenInNavigationOrder))] - fn children_in_navigation_order(&self) -> Option>> { - // For now, we assume the children are in navigation order. - self.children_internal() - } - - #[unsafe(method_id(accessibilitySelectedChildren))] - fn selected_children(&self) -> Option>> { - self.resolve_with_context(|node, _, context| { - let wrapper = NodeWrapper(node); - if !wrapper.is_container_with_selectable_children() { - return None; - } - let platform_nodes = node - .items(filter) - .filter(|item| item.is_selected() == Some(true)) - .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - Some(NSArray::from_retained_slice(&platform_nodes)) - }) - .flatten() - } - - #[unsafe(method(accessibilityFrame))] - fn frame(&self) -> NSRect { - self.resolve_with_context(|node, _, context| { - let view = match context.view.load() { - Some(view) => view, - None => { - return NSRect::ZERO; - } - }; - - node.bounding_box().map_or_else( - || { - if node.is_root() { - NSAccessibility::accessibilityFrame(&*view) - } else { - NSRect::ZERO - } - }, - |rect| to_ns_rect(&view, rect), - ) - }) - .unwrap_or(NSRect::ZERO) - } - - #[unsafe(method_id(accessibilityRole))] - fn role(&self) -> Retained { - self.resolve(ns_role) - .unwrap_or(unsafe { NSAccessibilityUnknownRole }) - .copy() - } - - #[unsafe(method_id(accessibilitySubrole))] - fn sub_role(&self) -> Retained { - self.resolve(ns_sub_role) - .unwrap_or(unsafe { NSAccessibilityUnknownSubrole }) - .copy() - } - - #[unsafe(method_id(accessibilityRoleDescription))] - fn role_description(&self) -> Option> { - self.resolve(|node| { - if let Some(role_description) = node.role_description() { - Some(NSString::from_str(role_description)) - } else { - unsafe { msg_send![super(self), accessibilityRoleDescription] } - } - }) - .flatten() - } - - #[unsafe(method_id(accessibilityIdentifier))] - fn identifier(&self) -> Option> { - self.resolve(|node| { - node.author_id().map(NSString::from_str) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityTitle))] - fn title(&self) -> Option> { - self.resolve(|node| { - let wrapper = NodeWrapper(node); - wrapper.title().map(|title| NSString::from_str(&title)) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityHelp))] - fn description(&self) -> Option> { - self.resolve(|node| { - let wrapper = NodeWrapper(node); - wrapper.description().map(|description| NSString::from_str(&description)) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityPlaceholderValue))] - fn placeholder(&self) -> Option> { - self.resolve(|node| { - let wrapper = NodeWrapper(node); - wrapper.placeholder().map(NSString::from_str) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityValue))] - fn value(&self) -> Option> { - self.resolve(|node| { - let wrapper = NodeWrapper(node); - wrapper.value().map(|value| match value { - Value::Bool(value) => { - Retained::into_super(Retained::into_super(NSNumber::new_bool(value))) - } - Value::Number(value) => { - Retained::into_super(Retained::into_super(NSNumber::new_f64(value))) - } - Value::String(value) => { - Retained::into_super(NSString::from_str(&value)) - } - }) - }) - .flatten() - } - - #[unsafe(method(setAccessibilityValue:))] - fn set_value(&self, value: &NSObject) { - if let Some(string) = value.downcast_ref::() { - self.resolve_with_context(|node, tree, context| { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::SetValue, - target_tree, - target_node, - data: Some(ActionData::Value(string.to_string().into())), - }); - } - }); - } else if let Some(number) = value.downcast_ref::() { - self.resolve_with_context(|node, tree, context| { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::SetValue, - target_tree, - target_node, - data: Some(ActionData::NumericValue(number.doubleValue())), - }); - } - }); - } - } - - #[unsafe(method_id(accessibilityMinValue))] - fn min_value(&self) -> Option> { - self.resolve(|node| { - node.min_numeric_value().map(NSNumber::new_f64) - }) - .flatten() - } - - #[unsafe(method_id(accessibilityMaxValue))] - fn max_value(&self) -> Option> { - self.resolve(|node| { - node.max_numeric_value().map(NSNumber::new_f64) - }) - .flatten() - } - - - #[unsafe(method_id(accessibilityURL))] - fn url(&self) -> Option> { - self.resolve(|node| { - node.supports_url().then(|| node.url()).flatten().and_then(|url| { - let ns_string = NSString::from_str(url); - NSURL::URLWithString(&ns_string) - }) - }) - .flatten() - } - - #[unsafe(method(accessibilityOrientation))] - fn orientation(&self) -> NSAccessibilityOrientation { - self.resolve(|node| { - match node.orientation() { - Some(Orientation::Horizontal) => NSAccessibilityOrientation::Horizontal, - Some(Orientation::Vertical) => NSAccessibilityOrientation::Vertical, - None => NSAccessibilityOrientation::Unknown, - } - }) - .unwrap_or(NSAccessibilityOrientation::Unknown) - } - - #[unsafe(method(isAccessibilityElement))] - fn is_accessibility_element(&self) -> bool { - self.resolve(|node| filter(node) == FilterResult::Include) - .unwrap_or(false) - } - - #[unsafe(method(isAccessibilityFocused))] - fn is_focused(&self) -> bool { - self.resolve(|node| node.is_focused() && can_be_focused(node)) - .unwrap_or(false) - } - - #[unsafe(method(isAccessibilityEnabled))] - fn is_enabled(&self) -> bool { - self.resolve(|node| !node.is_disabled()).unwrap_or(false) - } - - #[unsafe(method(setAccessibilityFocused:))] - fn set_focused(&self, focused: bool) { - self.resolve_with_context(|node, tree, context| { - if focused { - if node.is_focusable(&filter) { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::Focus, - target_tree, - target_node, - data: None, - }); - } - } - } else { - let root = tree.state().root(); - if root.is_focusable(&filter) { - if let Some((target_node, target_tree)) = tree.state().locate_node(root.id()) { - context.do_action(ActionRequest { - action: Action::Focus, - target_tree, - target_node, - data: None, - }); - } - } - } - }); - } - - #[unsafe(method(accessibilityPerformPress))] - fn press(&self) -> bool { - self.resolve_with_context(|node, tree, context| { - let clickable = node.is_clickable(&filter); - if clickable { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::Click, - target_tree, - target_node, - data: None, - }); - } - } - clickable - }) - .unwrap_or(false) - } - - #[unsafe(method(accessibilityPerformIncrement))] - fn increment(&self) -> bool { - self.resolve_with_context(|node, tree, context| { - let supports_increment = node.supports_increment(&filter); - if supports_increment { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::Increment, - target_tree, - target_node, - data: None, - }); - } - } - supports_increment - }) - .unwrap_or(false) - } - - #[unsafe(method(accessibilityPerformDecrement))] - fn decrement(&self) -> bool { - self.resolve_with_context(|node, tree, context| { - let supports_decrement = node.supports_decrement(&filter); - if supports_decrement { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::Decrement, - target_tree, - target_node, - data: None, - }); - } - } - supports_decrement - }) - .unwrap_or(false) - } - - #[unsafe(method(accessibilityNotifiesWhenDestroyed))] - fn notifies_when_destroyed(&self) -> bool { - true - } - - #[unsafe(method(accessibilityNumberOfCharacters))] - fn number_of_characters(&self) -> NSInteger { - self.resolve(|node| { - if node.supports_text_ranges() { - node.document_range().end().to_global_utf16_index() as _ - } else { - 0 - } - }) - .unwrap_or(0) - } - - #[unsafe(method_id(accessibilitySelectedText))] - fn selected_text(&self) -> Option> { - self.resolve(|node| { - if node.supports_text_ranges() { - if let Some(range) = node.text_selection() { - let text = range.text(); - return Some(NSString::from_str(&text)); - } - } - None - }) - .flatten() - } - - #[unsafe(method(accessibilitySelectedTextRange))] - fn selected_text_range(&self) -> NSRange { - self.resolve(|node| { - if node.supports_text_ranges() { - if let Some(range) = node.text_selection() { - return to_ns_range(&range); - } - } - NSRange::new(0, 0) - }) - .unwrap_or_else(|| NSRange::new(0, 0)) - } - - #[unsafe(method(accessibilityInsertionPointLineNumber))] - fn insertion_point_line_number(&self) -> NSInteger { - self.resolve(|node| { - if node.supports_text_ranges() { - if let Some(pos) = node.text_selection_focus() { - return pos.to_line_index() as _; - } - } - 0 - }) - .unwrap_or(0) - } - - #[unsafe(method(accessibilityRangeForLine:))] - fn range_for_line(&self, line_index: NSInteger) -> NSRange { - self.resolve(|node| { - if node.supports_text_ranges() && line_index >= 0 { - if let Some(range) = node.line_range_from_index(line_index as _) { - return to_ns_range(&range); - } - } - NSRange::new(0, 0) - }) - .unwrap_or_else(|| NSRange::new(0, 0)) - } - - #[unsafe(method(accessibilityRangeForPosition:))] - fn range_for_position(&self, point: NSPoint) -> NSRange { - self.resolve_with_context(|node, _, context| { - let view = match context.view.load() { - Some(view) => view, - None => { - return NSRange::new(0, 0); - } - }; - - if node.supports_text_ranges() { - let point = from_ns_point(&view, node, point); - let pos = node.text_position_at_point(point); - return to_ns_range_for_character(&pos); - } - NSRange::new(0, 0) - }) - .unwrap_or_else(|| NSRange::new(0, 0)) - } - - #[unsafe(method_id(accessibilityStringForRange:))] - fn string_for_range(&self, range: NSRange) -> Option> { - self.resolve(|node| { - if node.supports_text_ranges() { - if let Some(range) = from_ns_range(node, range) { - let text = range.text(); - return Some(NSString::from_str(&text)); - } - } - None - }) - .flatten() - } - - #[unsafe(method_id(accessibilityAttributedStringForRange:))] - fn attributed_string_for_range(&self, range: NSRange) -> Option> { - self.resolve(|node| { - if node.supports_text_ranges() { - if let Some(range) = from_ns_range(node, range) { - let result = NSMutableAttributedString::new(); - result.beginEditing(); - range.traverse_text::<_, ()>(|node, text| { - let ns_text = NSString::from_str(text); - let attrs = NSMutableDictionary::::new(); - if let Some(color) = node.background_color() { - attrs.insert( - unsafe { NSAccessibilityBackgroundColorTextAttribute }, - &to_color_attribute(color) - ); - } - if let Some(color) = node.foreground_color() { - attrs.insert( - unsafe { NSAccessibilityForegroundColorTextAttribute }, - &to_color_attribute(color) - ); - } - let font_attrs = NSMutableDictionary::::new(); - if let Some(family) = node.font_family() { - font_attrs.insert( - unsafe { NSAccessibilityFontFamilyKey }, - &Retained::into_super(Retained::into_super(NSString::from_str(family))) - ); - } - if let Some(size) = node.font_size() { - font_attrs.insert( - unsafe { NSAccessibilityFontSizeKey }, - &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_f32(size)))) - ); - } - if let Some(weight) = node.font_weight() { - if weight >= 700.0 { - font_attrs.insert( - ns_string!("AXFontBold"), - &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) - ); - } - } - if node.is_italic() { - font_attrs.insert( - ns_string!("AXFontItalic"), - &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) - ); - } - if !font_attrs.is_empty() { - attrs.insert( - unsafe { NSAccessibilityFontTextAttribute }, - &Retained::into_super(Retained::into_super(Retained::into_super(font_attrs))) - ); - } - if let Some(deco) = node.underline() { - attrs.insert( - unsafe { NSAccessibilityUnderlineTextAttribute }, - &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) - ); - attrs.insert( - unsafe { NSAccessibilityUnderlineColorTextAttribute }, - &to_color_attribute(deco.color) - ); - } - if let Some(deco) = node.strikethrough() { - attrs.insert( - unsafe { NSAccessibilityStrikethroughTextAttribute }, - &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_bool(true)))) - ); - attrs.insert( - unsafe { NSAccessibilityStrikethroughColorTextAttribute }, - &to_color_attribute(deco.color) - ); - } - if let Some(language) = node.language() { - attrs.insert( - unsafe { NSAccessibilityLanguageTextAttribute }, - &Retained::into_super(Retained::into_super(NSString::from_str(language))) - ); - } - if let Some(align) = node.text_align() { - let ns_align = match align { - TextAlign::Left => NSTextAlignment::Left, - TextAlign::Center => NSTextAlignment::Center, - TextAlign::Right => NSTextAlignment::Right, - TextAlign::Justify => NSTextAlignment::Justified, - }; - attrs.insert( - unsafe { NSAccessibilityTextAlignmentAttribute }, - &Retained::into_super(Retained::into_super(Retained::into_super(NSNumber::new_isize(ns_align.0)))) - ); - } - let part = unsafe { NSAttributedString::new_with_attributes(&ns_text, &attrs) }; - result.appendAttributedString(&part); - None - }); - result.endEditing(); - return Some(Retained::into_super(result)); - } - } - None - }) - .flatten() - } - - #[unsafe(method(accessibilityFrameForRange:))] - fn frame_for_range(&self, range: NSRange) -> NSRect { - self.resolve_with_context(|node, _, context| { - let view = match context.view.load() { - Some(view) => view, - None => { - return NSRect::ZERO; - } - }; - - if node.supports_text_ranges() { - if let Some(range) = from_ns_range(node, range) { - let rects = range.bounding_boxes(); - if let Some(rect) = - rects.into_iter().reduce(|rect1, rect2| rect1.union(rect2)) - { - return to_ns_rect(&view, rect); - } - } - } - NSRect::ZERO - }) - .unwrap_or(NSRect::ZERO) - } - - #[unsafe(method(accessibilityLineForIndex:))] - fn line_for_index(&self, index: NSInteger) -> NSInteger { - self.resolve(|node| { - if node.supports_text_ranges() && index >= 0 { - if let Some(pos) = node.text_position_from_global_utf16_index(index as _) { - return pos.to_line_index() as _; - } - } - 0 - }) - .unwrap_or(0) - } - - #[unsafe(method(accessibilityRangeForIndex:))] - fn range_for_index(&self, index: NSInteger) -> NSRange { - self.resolve(|node| { - if node.supports_text_ranges() && index >= 0 { - if let Some(pos) = node.text_position_from_global_utf16_index(index as _) { - return to_ns_range_for_character(&pos); - } - } - NSRange::new(0, 0) - }) - .unwrap_or_else(|| NSRange::new(0, 0)) - } - - #[unsafe(method(accessibilityStyleRangeForIndex:))] - fn style_range_for_index(&self, index: NSInteger) -> NSRange { - self.resolve(|node| { - if node.supports_text_ranges() && index >= 0 { - if let Some(pos) = node.text_position_from_global_utf16_index(index as _) { - let start = if pos.is_format_start() { - pos - } else { - pos.backward_to_format_start() - }; - let mut range = start.to_degenerate_range(); - range.set_end(pos.forward_to_format_end()); - return to_ns_range(&range); - } - } - NSRange::new(0, 0) - }) - .unwrap_or_else(|| NSRange::new(0, 0)) - } - - #[unsafe(method(setAccessibilitySelectedTextRange:))] - fn set_selected_text_range(&self, range: NSRange) { - self.resolve_with_context(|node, tree, context| { - if node.supports_text_ranges() { - if let Some(range) = from_ns_range(node, range) { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::SetTextSelection, - target_tree, - target_node, - data: Some(ActionData::SetTextSelection(range.to_text_selection())), - }); - } - } - } - }); - } - - #[unsafe(method(isAccessibilityRequired))] - fn is_required(&self) -> bool { - self.resolve(|node| node.is_required()) - .unwrap_or(false) - } - - #[unsafe(method(isAccessibilitySelected))] - fn is_selected(&self) -> bool { - self.resolve(|node| { - let wrapper = NodeWrapper(node); - wrapper.is_item_like() - && node.is_selectable() - && node.is_selected().unwrap_or(false) - }) - .unwrap_or(false) - } - - #[unsafe(method(setAccessibilitySelected:))] - fn set_selected(&self, selected: bool) { - self.resolve_with_context(|node, tree, context| { - let wrapper = NodeWrapper(node); - if !node.is_clickable(&filter) - || !wrapper.is_item_like() - || !node.is_selectable() - { - return; - } - if node.is_selected() == Some(selected) { - return; - } - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::Click, - target_tree, - target_node, - data: None, - }); - } - }); - } - - - #[unsafe(method_id(accessibilityAttributeValue:))] - fn accessibility_attribute_value(&self, attr: &NSString) -> Option> { - self.resolve(|node| { - if attr == ns_string!("AXBrailleLabel") && node.has_braille_label() { - return Some(NSString::from_str(node.braille_label().unwrap())) - } else if attr == ns_string!("AXBrailleRoleDescription") && node.has_braille_role_description() { - return Some(NSString::from_str(node.braille_role_description().unwrap())) - } - - None - }) - .flatten() - } - - #[unsafe(method_id(accessibilityRows))] - fn rows(&self) -> Option>> { - self.resolve_with_context(|node, _, context| { - let wrapper = NodeWrapper(node); - if !wrapper.is_container_with_selectable_children() { - return None; - } - let platform_nodes = node - .items(filter) - .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - Some(NSArray::from_retained_slice(&platform_nodes)) - }) - .flatten() - } - - #[unsafe(method_id(accessibilitySelectedRows))] - fn selected_rows(&self) -> Option>> { - self.resolve_with_context(|node, _, context| { - let wrapper = NodeWrapper(node); - if !wrapper.is_container_with_selectable_children() { - return None; - } - let platform_nodes = node - .items(filter) - .filter(|item| item.is_selected() == Some(true)) - .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - Some(NSArray::from_retained_slice(&platform_nodes)) - }) - .flatten() - } - - #[unsafe(method(accessibilityPerformPick))] - fn pick(&self) -> bool { - self.resolve_with_context(|node, tree, context| { - let wrapper = NodeWrapper(node); - let selectable = node.is_clickable(&filter) - && wrapper.is_item_like() - && node.is_selectable(); - if selectable { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::Click, - target_tree, - target_node, - data: None, - }); - } - } - selectable - }) - .unwrap_or(false) - } - - #[unsafe(method_id(accessibilityLinkedUIElements))] - fn linked_ui_elements(&self) -> Option>> { - self.resolve_with_context(|node, _, context| { - let platform_nodes: Vec> = node - .controls() - .filter(|controlled| filter(controlled) == FilterResult::Include) - .map(|controlled| context.get_or_create_platform_node(controlled.id())) - .collect(); - if platform_nodes.is_empty() { - None - } else { - Some(NSArray::from_retained_slice(&platform_nodes)) - } - }) - .flatten() - } - - #[unsafe(method_id(accessibilityTabs))] - fn tabs(&self) -> Option>> { - self.resolve_with_context(|node, _, context| { - if node.role() != Role::TabList { - return None; - } - let platform_nodes = node - .filtered_children(filter) - .filter(|child| child.role() == Role::Tab) - .map(|tab| context.get_or_create_platform_node(tab.id())) - .collect::>>(); - Some(NSArray::from_retained_slice(&platform_nodes)) - }) - .flatten() - } - - #[unsafe(method(isAccessibilityModal))] - fn is_modal(&self) -> bool { - self.resolve(|node| node.is_modal()) - .unwrap_or(false) - } - - // We discovered through experimentation that when mixing the newer - // NSAccessibility protocols with the older informal protocol, - // the platform uses both protocols to discover which actions are - // available and then perform actions. That means our implementation - // of the legacy methods below only needs to cover actions not already - // handled by the newer methods. - - #[unsafe(method_id(accessibilityActionNames))] - fn action_names(&self) -> Retained> { - let mut result = vec![]; - self.resolve(|node| { - if node.supports_action(Action::ScrollIntoView, &filter) { - result.push(ns_string!(SCROLL_TO_VISIBLE_ACTION).copy()); - } - }); - NSArray::from_retained_slice(&result) - } - - #[unsafe(method(accessibilityPerformAction:))] - fn perform_action(&self, action: &NSString) { - self.resolve_with_context(|node, tree, context| { - if action == ns_string!(SCROLL_TO_VISIBLE_ACTION) { - if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { - context.do_action(ActionRequest { - action: Action::ScrollIntoView, - target_tree, - target_node, - data: None, - }); - } - } - }); - } - - #[unsafe(method(isAccessibilitySelectorAllowed:))] - fn is_selector_allowed(&self, selector: Sel) -> bool { - self.resolve(|node| { - if selector == sel!(setAccessibilityFocused:) { - return node.is_focusable(&filter); - } - if selector == sel!(accessibilityPerformPress) { - return node.is_clickable(&filter); - } - if selector == sel!(accessibilityPerformIncrement) { - return node.supports_increment(&filter); - } - if selector == sel!(accessibilityPerformDecrement) { - return node.supports_decrement(&filter); - } - if selector == sel!(accessibilityNumberOfCharacters) - || selector == sel!(accessibilitySelectedText) - || selector == sel!(accessibilitySelectedTextRange) - || selector == sel!(accessibilityInsertionPointLineNumber) - || selector == sel!(accessibilityRangeForLine:) - || selector == sel!(accessibilityRangeForPosition:) - || selector == sel!(accessibilityStringForRange:) - || selector == sel!(accessibilityAttributedStringForRange:) - || selector == sel!(accessibilityFrameForRange:) - || selector == sel!(accessibilityLineForIndex:) - || selector == sel!(accessibilityRangeForIndex:) - || selector == sel!(accessibilityStyleRangeForIndex:) - || selector == sel!(setAccessibilitySelectedTextRange:) - { - return node.supports_text_ranges(); - } - if selector == sel!(setAccessibilityValue:) { - return (node.supports_text_ranges() && !node.is_read_only()) || node.supports_action(Action::SetValue, &filter); - } - if selector == sel!(isAccessibilitySelected) { - let wrapper = NodeWrapper(node); - return wrapper.is_item_like(); - } - if selector == sel!(accessibilityRows) - || selector == sel!(accessibilitySelectedRows) - { - let wrapper = NodeWrapper(node); - return wrapper.is_container_with_selectable_children() - } - if selector == sel!(setAccessibilitySelected:) - || selector == sel!(accessibilityPerformPick) - { - let wrapper = NodeWrapper(node); - return node.is_clickable(&filter) - && wrapper.is_item_like() - && node.is_selectable(); - } - if selector == sel!(accessibilityTabs) { - return node.role() == Role::TabList; - } - if selector == sel!(isAccessibilityModal) { - return node.is_dialog(); - } - if selector == sel!(accessibilityAttributeValue:) { - return node.has_braille_label() || node.has_braille_role_description() - } - if selector == sel!(accessibilityURL) { - return node.supports_url(); - } - selector == sel!(accessibilityParent) - || selector == sel!(accessibilityChildren) - || selector == sel!(accessibilityChildrenInNavigationOrder) - || selector == sel!(accessibilitySelectedChildren) - || selector == sel!(accessibilityFrame) - || selector == sel!(accessibilityRole) - || selector == sel!(accessibilitySubrole) - || selector == sel!(isAccessibilityEnabled) - || selector == sel!(accessibilityWindow) - || selector == sel!(accessibilityTopLevelUIElement) - || selector == sel!(accessibilityLinkedUIElements) - || selector == sel!(accessibilityRoleDescription) - || selector == sel!(accessibilityIdentifier) - || selector == sel!(accessibilityTitle) - || selector == sel!(accessibilityHelp) - || selector == sel!(accessibilityPlaceholderValue) - || selector == sel!(accessibilityValue) - || selector == sel!(accessibilityMinValue) - || selector == sel!(accessibilityMaxValue) - || selector == sel!(isAccessibilityRequired) - || selector == sel!(accessibilityOrientation) - || selector == sel!(isAccessibilityElement) - || selector == sel!(isAccessibilityFocused) - || selector == sel!(accessibilityNotifiesWhenDestroyed) - || selector == sel!(isAccessibilitySelectorAllowed:) - || selector == sel!(accessibilityActionNames) - || selector == sel!(accessibilityPerformAction:) - }) - .unwrap_or(false) - } - } -); - -impl PlatformNode { - pub(crate) fn new(context: Weak, node_id: FullNodeId) -> Retained { - let this = Self::alloc().set_ivars(PlatformNodeIvars { context, node_id }); - - unsafe { msg_send![super(this), init] } - } - - fn resolve_with_context(&self, f: F) -> Option - where - F: FnOnce(&NodeRef, &Tree, &Rc) -> T, - { - let context = self.ivars().context.upgrade()?; - let tree = context.tree.borrow(); - let state = tree.state(); - let node = state.node_by_id(self.ivars().node_id)?; - Some(f(&node, &tree, &context)) - } - - fn resolve(&self, f: F) -> Option - where - F: FnOnce(&NodeRef) -> T, - { - self.resolve_with_context(|node, _, _| f(node)) - } - - fn children_internal(&self) -> Option>> { - self.resolve_with_context(|node, _, context| { - let platform_nodes = node - .filtered_children(filter) - .map(|child| context.get_or_create_platform_node(child.id())) - .collect::>>(); - NSArray::from_retained_slice(&platform_nodes) - }) - } -} From 0c57e8179cf8c0af55743ebde62c2d385383712c Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Aug 2026 10:24:42 +0300 Subject: [PATCH 5/7] format --- adapters/macos/src/node.rs | 14 ++++++++------ adapters/macos/src/patch.rs | 2 +- adapters/macos/src/subclass.rs | 6 +++--- adapters/macos/src/util.rs | 14 ++++++-------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/adapters/macos/src/node.rs b/adapters/macos/src/node.rs index d2b5951ab..5d161645a 100644 --- a/adapters/macos/src/node.rs +++ b/adapters/macos/src/node.rs @@ -15,14 +15,16 @@ use accesskit::{ }; use accesskit_consumer::{FilterResult, FullNodeId, NodeRef, Tree}; use objc2::{ - define_class, msg_send, + AnyThread, DeclaredClass, define_class, msg_send, rc::Retained, runtime::{AnyObject, Sel}, - sel, AnyThread, DeclaredClass, + sel, }; use objc2_app_kit::*; use objc2_foundation::{ - NSArray, NSAttributedString, NSAttributedStringKey, NSCopying, NSInteger, NSMutableAttributedString, NSMutableDictionary, NSNumber, NSObject, NSPoint, NSRange, NSRect, NSString, NSURL, ns_string, + NSArray, NSAttributedString, NSAttributedStringKey, NSCopying, NSInteger, + NSMutableAttributedString, NSMutableDictionary, NSNumber, NSObject, NSPoint, NSRange, NSRect, + NSString, NSURL, ns_string, }; use std::rc::{Rc, Weak}; @@ -579,7 +581,7 @@ define_class!( .flatten() } - + #[unsafe(method_id(accessibilityURL))] fn url(&self) -> Option> { self.resolve(|node| { @@ -987,7 +989,7 @@ define_class!( }) .unwrap_or_else(|| NSRange::new(0, 0)) } - + #[unsafe(method(setAccessibilitySelectedTextRange:))] fn set_selected_text_range(&self, range: NSRange) { self.resolve_with_context(|node, tree, context| { @@ -1047,7 +1049,7 @@ define_class!( }); } - + #[unsafe(method_id(accessibilityAttributeValue:))] fn accessibility_attribute_value(&self, attr: &NSString) -> Option> { self.resolve(|node| { diff --git a/adapters/macos/src/patch.rs b/adapters/macos/src/patch.rs index 640a9a7c3..c4685799e 100644 --- a/adapters/macos/src/patch.rs +++ b/adapters/macos/src/patch.rs @@ -9,7 +9,7 @@ use objc2::{ ffi::class_addMethod, msg_send, runtime::{AnyClass, AnyObject, MethodImplementation, Sel}, - sel + sel, }; use objc2_app_kit::NSWindow; use std::{ffi::CString, ptr::null_mut, str::FromStr}; diff --git a/adapters/macos/src/subclass.rs b/adapters/macos/src/subclass.rs index 87fbb2609..1edf6cf7c 100644 --- a/adapters/macos/src/subclass.rs +++ b/adapters/macos/src/subclass.rs @@ -5,7 +5,7 @@ use accesskit::{ActionHandler, ActivationHandler, TreeUpdate}; use objc2::{ - DeclaredClass, + AnyThread, DeclaredClass, declare::ClassBuilder, define_class, ffi::{ @@ -15,13 +15,13 @@ use objc2::{ msg_send, rc::Retained, runtime::{AnyClass, Sel}, - sel, AnyThread, + sel, }; use objc2_app_kit::{NSView, NSWindow}; use objc2_foundation::{NSArray, NSObject, NSPoint}; use std::{ cell::RefCell, - ffi::{c_void, CString}, + ffi::{CString, c_void}, str::FromStr, sync::Mutex, }; diff --git a/adapters/macos/src/util.rs b/adapters/macos/src/util.rs index 58643dff2..128ac4797 100644 --- a/adapters/macos/src/util.rs +++ b/adapters/macos/src/util.rs @@ -96,14 +96,12 @@ unsafe impl RefEncode for CGColor { } pub(crate) fn to_color_attribute(color: Color) -> Retained { - let ns_color = - NSColor::colorWithSRGBRed_green_blue_alpha( - color_channel_to_f64(color.red), - color_channel_to_f64(color.green), - color_channel_to_f64(color.blue), - color_channel_to_f64(color.alpha), - ) - ; + let ns_color = NSColor::colorWithSRGBRed_green_blue_alpha( + color_channel_to_f64(color.red), + color_channel_to_f64(color.green), + color_channel_to_f64(color.blue), + color_channel_to_f64(color.alpha), + ); let cg_color: *const CGColor = unsafe { msg_send![&ns_color, CGColor] }; unsafe { Retained::retain(cg_color as *mut AnyObject).unwrap() } } From a4301cc2a8066eb94e76b91d49b819fa5d299584 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Aug 2026 10:30:00 +0300 Subject: [PATCH 6/7] fix incorrect type while merging --- adapters/macos/src/node.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/macos/src/node.rs b/adapters/macos/src/node.rs index 5d161645a..d62ef767d 100644 --- a/adapters/macos/src/node.rs +++ b/adapters/macos/src/node.rs @@ -551,7 +551,7 @@ define_class!( }); } }); - } else if let Some(number) = value.downcast_ref::() { + } else if let Some(number) = value.downcast_ref::() { self.resolve_with_context(|node, tree, context| { if let Some((target_node, target_tree)) = tree.state().locate_node(node.id()) { context.do_action(ActionRequest { From 641675400e78130b3a036a03320e168132107a39 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Aug 2026 10:33:24 +0300 Subject: [PATCH 7/7] try to fix Cargo.lock issues --- Cargo.lock | 1369 +++++++++++++++++++++++++++------------------------- 1 file changed, 716 insertions(+), 653 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37080bc1c..98da8f585 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.32" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" +checksum = "fe21446ad43aa56417a767f3e2f3d7c4ca522904de1dd640529a76e9c5c3b33c" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.10" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" @@ -36,7 +36,7 @@ version = "0.7.5" dependencies = [ "accesskit", "accesskit_consumer", - "jni 0.21.1", + "jni", "log", ] @@ -57,7 +57,7 @@ name = "accesskit_consumer" version = "0.38.0" dependencies = [ "accesskit", - "hashbrown 0.16.1", + "hashbrown", ] [[package]] @@ -66,7 +66,7 @@ version = "0.1.2" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown 0.16.1", + "hashbrown", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-ui-kit", @@ -78,7 +78,7 @@ version = "0.26.3" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown 0.16.1", + "hashbrown", "objc2 0.6.4", "objc2-app-kit 0.3.2", "objc2-foundation 0.3.2", @@ -108,7 +108,7 @@ version = "0.34.0" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown 0.16.1", + "hashbrown", "parking_lot", "scopeguard", "static_assertions", @@ -133,14 +133,29 @@ dependencies = [ "winit", ] +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" -version = "0.8.12" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.3.4", + "getrandom 0.2.8", "once_cell", "version_check", "zerocopy", @@ -148,21 +163,23 @@ dependencies = [ [[package]] name = "android-activity" -version = "0.6.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.13.1", + "bitflags 2.8.0", "cc", - "jni 0.22.4", + "cesu8", + "jni", + "jni-sys", "libc", "log", "ndk", "ndk-context", "ndk-sys", "num_enum", - "thiserror 2.0.19", + "thiserror", ] [[package]] @@ -173,27 +190,27 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "arrayref" -version = "0.3.9" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" -version = "0.7.8" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "as-raw-xcb-connection" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +checksum = "2d5f312b0a56c5cdf967c0aeb67f6289603354951683bc97ddc595ab974ba9aa" [[package]] name = "async-broadcast" -version = "0.7.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ "event-listener", "event-listener-strategy", @@ -203,9 +220,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.5.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -215,41 +232,52 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.14.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", - "pin-project-lite", "slab", ] +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + [[package]] name = "async-io" -version = "2.6.0" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ - "autocfg", + "async-lock", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 1.1.4", + "rustix 0.38.44", "slab", - "windows-sys 0.61.2", + "tracing", + "windows-sys 0.59.0", ] [[package]] name = "async-lock" -version = "3.4.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ "event-listener", "event-listener-strategy", @@ -258,9 +286,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.5.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel", "async-io", @@ -271,7 +299,8 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.1.4", + "rustix 0.38.44", + "tracing", ] [[package]] @@ -282,14 +311,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] name = "async-signal" -version = "0.2.14" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ "async-io", "async-lock", @@ -297,10 +326,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.4", + "rustix 0.38.44", "signal-hook-registry", "slab", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -311,13 +340,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.91" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] [[package]] @@ -365,9 +394,24 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.1" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] [[package]] name = "bitflags" @@ -377,9 +421,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "block2" @@ -401,9 +445,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.2" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel", "async-task", @@ -414,21 +458,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.3" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bytemuck" -version = "1.25.2" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "bytes" -version = "1.12.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "calloop" @@ -436,12 +480,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "log", "polling", "rustix 0.38.44", "slab", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -458,14 +502,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.0" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ - "find-msvc-tools", "jobserver", - "libc", - "shlex", ] [[package]] @@ -476,21 +517,21 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" dependencies = [ "bytes", "memchr", @@ -507,9 +548,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -517,15 +558,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.7" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core-graphics" -version = "0.23.2" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -536,9 +577,9 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.3" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -547,24 +588,24 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.22" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] [[package]] -name = "ctor" -version = "0.10.1" +name = "ctor-lite" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" -dependencies = [ - "dtor", -] +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" [[package]] name = "cursor-icon" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "dispatch" @@ -578,36 +619,30 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", ] [[package]] name = "dlib" -version = "0.5.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ "libloading", ] [[package]] name = "downcast-rs" -version = "1.2.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dpi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" - -[[package]] -name = "dtor" -version = "0.8.1" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] name = "dyn-clone" @@ -617,15 +652,15 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "endi" -version = "1.1.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" [[package]] name = "enumflags2" -version = "0.7.12" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" dependencies = [ "enumflags2_derive", "serde", @@ -633,13 +668,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.12" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] @@ -650,40 +685,41 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.14" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] name = "event-listener" -version = "5.4.2" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ + "concurrent-queue", "parking", "pin-project-lite", ] [[package]] name = "event-listener-strategy" -version = "0.5.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ "event-listener", "pin-project-lite", @@ -691,15 +727,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "foldhash" @@ -719,13 +749,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] [[package]] @@ -736,21 +766,21 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.33" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -761,67 +791,74 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", + "pin-utils", "slab", ] [[package]] name = "gethostname" -version = "1.1.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ - "rustix 1.1.4", - "windows-link", + "libc", + "windows-targets 0.48.1", ] [[package]] name = "getrandom" -version = "0.3.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", - "r-efi 5.3.0", - "wasip2", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.4.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "libc", - "r-efi 6.0.0", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + [[package]] name = "hashbrown" version = "0.16.1" @@ -831,12 +868,6 @@ dependencies = [ "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - [[package]] name = "heck" version = "0.5.0" @@ -845,9 +876,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hex" @@ -857,19 +888,19 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "indexmap" -version = "2.14.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.17.1", + "hashbrown", ] [[package]] name = "itoa" -version = "1.0.18" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jni" @@ -880,118 +911,63 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys 0.3.1", + "jni-sys", "log", - "thiserror 1.0.69", + "thiserror", "walkdir", "windows-sys 0.45.0", ] -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.19", - "walkdir", - "windows-link", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.119", -] - -[[package]] -name = "jni-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" -dependencies = [ - "jni-sys 0.4.1", -] - [[package]] name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote", - "syn 2.0.119", -] +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.35" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ - "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ - "cfg-if", - "futures-util", + "once_cell", "wasm-bindgen", ] [[package]] name = "libc" -version = "0.2.189" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" -version = "0.8.9" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-link", + "windows-targets 0.52.6", ] [[package]] name = "libredox" -version = "0.1.19" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "libc", - "plain", - "redox_syscall 0.9.1", + "redox_syscall 0.4.1", ] [[package]] @@ -1002,58 +978,77 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.12.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" [[package]] name = "lock_api" -version = "0.4.14" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.33" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] [[package]] name = "memchr" -version = "2.8.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memmap2" -version = "0.9.11" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" +checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.9.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" -version = "1.2.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", - "windows-sys 0.61.2", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", ] [[package]] @@ -1062,14 +1057,14 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.13.1", - "jni-sys 0.3.1", + "bitflags 2.8.0", + "jni-sys", "log", "ndk-sys", "num_enum", "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", - "thiserror 1.0.69", + "thiserror", ] [[package]] @@ -1084,29 +1079,51 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys 0.3.1", + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.8.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", ] [[package]] name = "num_enum" -version = "0.7.6" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", - "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.6" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] @@ -1140,7 +1157,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -1156,7 +1173,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1177,7 +1194,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -1190,7 +1207,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -1212,7 +1229,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1224,7 +1241,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -1235,7 +1252,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "dispatch2", "objc2 0.6.4", ] @@ -1246,7 +1263,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -1293,7 +1310,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -1305,7 +1322,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -1324,7 +1341,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "dispatch", "libc", @@ -1337,7 +1354,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1350,7 +1367,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", "objc2-core-foundation", ] @@ -1373,7 +1390,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1385,7 +1402,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1398,7 +1415,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -1420,7 +1437,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -1452,26 +1469,34 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", ] +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.21.4" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "orbclient" -version = "0.3.55" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "libc", "libredox", ] @@ -1487,9 +1512,9 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.25.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" +checksum = "e25e9fb15717794fae58ab55c26e044103aad13186fbb625893f9a3bbcc24228" dependencies = [ "ttf-parser", ] @@ -1502,9 +1527,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.5" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -1512,22 +1537,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.12" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.5.13", "smallvec", - "windows-link", + "windows-targets 0.52.6", ] [[package]] name = "percent-encoding" -version = "2.3.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "phf" @@ -1560,7 +1585,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] @@ -1574,35 +1599,41 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.13" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.13" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] name = "pin-project-lite" -version = "0.2.17" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand", @@ -1611,59 +1642,54 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polling" -version = "3.11.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.4", - "windows-sys 0.61.2", + "rustix 0.38.44", + "tracing", + "windows-sys 0.59.0", ] [[package]] name = "portable-atomic" -version = "1.14.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "proc-macro-crate" -version = "3.5.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.107" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "pyo3" -version = "0.29.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc153f5fd745cc038b5eed86622125969f8a39834a57bc96beaaf2512b1da729" +checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c" dependencies = [ "libc", "once_cell", @@ -1675,18 +1701,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.29.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb77d9aa6d647507b55c69ee714d266d84c526c78ff0bc6dd8757f58591e64d1" +checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.29.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3160087aa5733bce7d9a729f8c55f85a2a53b74742a09613178eeebff0722253" +checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b" dependencies = [ "libc", "pyo3-build-config", @@ -1694,57 +1720,61 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.29.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f9d455db760a9a0b0ddeaac25f1390b8a36ba73dfbda9f127cac6fc340d4d5" +checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.119", + "syn", ] [[package]] name = "pyo3-macros-backend" -version = "0.29.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e343bcec300ff262f5806a33a4e51b6d097a8a46435f512fcb83e95592581625" +checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] name = "quick-xml" -version = "0.41.0" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" dependencies = [ "memchr", + "serde", ] [[package]] -name = "quote" -version = "1.0.47" +name = "quick-xml" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" dependencies = [ - "proc-macro2", + "memchr", ] [[package]] -name = "r-efi" -version = "5.3.0" +name = "quote" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] [[package]] name = "r-efi" -version = "6.0.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] name = "raw-window-handle" @@ -1769,50 +1799,38 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.18" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags 2.13.1", -] - -[[package]] -name = "redox_syscall" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07507be7b4a5f9f26eeb41eeaebb1f5a7ff29dfb29739facc21d35bf8b11c21e" -dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", ] [[package]] name = "ref-cast" -version = "1.0.26" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.26" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "rustc-demangle" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" @@ -1820,7 +1838,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -1829,22 +1847,28 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "errno", "libc", - "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "linux-raw-sys 0.9.3", + "windows-sys 0.59.0", ] [[package]] name = "rustversion" -version = "1.0.23" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "ryu" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "same-file" @@ -1857,9 +1881,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.2.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" dependencies = [ "dyn-clone", "ref-cast", @@ -1871,14 +1895,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.2.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba" +checksum = "301858a4023d78debd2353c7426dc486001bddc91ae31a76fb1f55132f7e2633" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 3.0.3", + "syn", ] [[package]] @@ -1889,9 +1913,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "sctk-adwaita" @@ -1906,17 +1930,11 @@ dependencies = [ "tiny-skia", ] -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - [[package]] name = "serde" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -1924,102 +1942,82 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.229" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] [[package]] name = "serde_derive_internals" -version = "0.30.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", + "ryu", "serde", "serde_core", - "zmij", ] [[package]] name = "serde_repr" -version = "0.1.21" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] -[[package]] -name = "shlex" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" - [[package]] name = "signal-hook-registry" -version = "1.4.8" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ - "errno", "libc", ] -[[package]] -name = "simd_cesu8" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" -dependencies = [ - "rustc_version", - "simdutf8", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "siphasher" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.12" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" @@ -2033,7 +2031,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "calloop", "calloop-wayland-source", "cursor-icon", @@ -2041,7 +2039,7 @@ dependencies = [ "log", "memmap2", "rustix 0.38.44", - "thiserror 1.0.69", + "thiserror", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -2054,21 +2052,21 @@ dependencies = [ [[package]] name = "smol_str" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.6.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2089,8 +2087,8 @@ dependencies = [ "objc2-foundation 0.3.2", "objc2-quartz-core 0.3.2", "raw-window-handle 0.6.2", - "redox_syscall 0.5.18", - "rustix 1.1.4", + "redox_syscall 0.5.13", + "rustix 1.0.3", "tiny-xlib", "tracing", "wasm-bindgen", @@ -2110,26 +2108,15 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" - -[[package]] -name = "syn" -version = "2.0.119" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "9df65f20698aeed245efdde3628a6b559ea1239bbb871af1b6e3b58c413b2bd1" [[package]] name = "syn" -version = "3.0.3" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -2144,62 +2131,42 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] name = "tempfile" -version = "3.27.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.2", "once_cell", - "rustix 1.1.4", - "windows-sys 0.61.2", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", + "rustix 1.0.3", + "windows-sys 0.59.0", ] [[package]] name = "thiserror" -version = "2.0.19" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ - "thiserror-impl 2.0.19", + "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.69" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.3", + "syn", ] [[package]] name = "tiny-skia" -version = "0.11.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +checksum = "3b72a92a05db376db09fe6d50b7948d106011761c05a6a45e23e17ee9b556222" dependencies = [ "arrayref", "arrayvec", @@ -2211,9 +2178,9 @@ dependencies = [ [[package]] name = "tiny-skia-path" -version = "0.11.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +checksum = "6ac3865b9708fc7e1961a65c3a4fa55e984272f33092d3c859929f887fceb647" dependencies = [ "arrayref", "bytemuck", @@ -2222,12 +2189,12 @@ dependencies = [ [[package]] name = "tiny-xlib" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" +checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" dependencies = [ "as-raw-xcb-connection", - "ctor", + "ctor-lite", "libloading", "pkg-config", "tracing", @@ -2235,34 +2202,35 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ + "backtrace", "libc", "mio", "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.7.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn", ] [[package]] name = "tokio-stream" -version = "0.1.19" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2271,31 +2239,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.1+spec-1.1.0" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" -dependencies = [ - "serde_core", -] +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.25.13+spec-1.1.0" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.1.3+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" -dependencies = [ "winnow", ] @@ -2318,7 +2273,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] @@ -2332,55 +2287,53 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.25.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" [[package]] name = "uds_windows" -version = "1.2.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "winapi", ] [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-segmentation" -version = "1.13.3" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "uuid" -version = "1.24.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "js-sys", - "serde_core", - "wasm-bindgen", + "serde", ] [[package]] name = "version_check" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.5.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -2388,47 +2341,63 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" +name = "wasi" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ - "wit-bindgen", + "wit-bindgen-rt", ] [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.76" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ + "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", + "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2436,35 +2405,35 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ - "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn", + "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ "unicode-ident", ] [[package]] name = "wayland-backend" -version = "0.3.16" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" +checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.4", + "rustix 0.38.44", "scoped-tls", "smallvec", "wayland-sys", @@ -2472,12 +2441,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.15" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" +checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ - "bitflags 2.13.1", - "rustix 1.1.4", + "bitflags 2.8.0", + "rustix 0.38.44", "wayland-backend", "wayland-scanner", ] @@ -2488,29 +2457,29 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.14" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" +checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" dependencies = [ - "rustix 1.1.4", + "rustix 0.38.44", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.13" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" +checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -2518,11 +2487,11 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.12" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" +checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -2531,11 +2500,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.12" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" +checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -2544,20 +2513,20 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.11" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" +checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.37.2", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.11" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" +checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" dependencies = [ "dlib", "log", @@ -2567,9 +2536,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.103" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2585,15 +2554,37 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" -version = "0.1.11" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ - "windows-sys 0.61.2", + "winapi", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows" version = "0.62.2" @@ -2647,7 +2638,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] @@ -2658,7 +2649,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] [[package]] @@ -2746,6 +2737,21 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -2777,6 +2783,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -2789,6 +2801,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -2801,6 +2819,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -2819,6 +2843,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -2831,6 +2861,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -2843,6 +2879,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -2855,6 +2897,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -2863,14 +2911,14 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.30.13" +version = "0.30.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" +checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.13.1", + "bitflags 2.8.0", "block2 0.5.1", "bytemuck", "calloop", @@ -2916,18 +2964,21 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen" -version = "0.57.1" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.8.0", +] [[package]] name = "x11-dl" @@ -2942,30 +2993,43 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", "libloading", "once_cell", - "rustix 1.1.4", + "rustix 0.38.44", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" [[package]] name = "xcursor" -version = "0.3.11" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23" +checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" +dependencies = [ + "nom", +] + +[[package]] +name = "xdg-home" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] [[package]] name = "xkbcommon-dl" @@ -2973,7 +3037,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.8.0", "dlib", "log", "once_cell", @@ -2982,18 +3046,19 @@ dependencies = [ [[package]] name = "xkeysym" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" [[package]] name = "zbus" -version = "5.18.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" +checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" dependencies = [ "async-broadcast", "async-executor", + "async-fs", "async-io", "async-lock", "async-process", @@ -3006,16 +3071,16 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "libc", + "nix", "ordered-stream", - "rustix 1.1.4", "serde", "serde_repr", + "static_assertions", "tracing", "uds_windows", - "uuid", - "windows-sys 0.61.2", + "windows-sys 0.59.0", "winnow", + "xdg-home", "zbus_macros", "zbus_names", "zvariant", @@ -3023,9 +3088,9 @@ dependencies = [ [[package]] name = "zbus-lockstep" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863" +checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" dependencies = [ "zbus_xml", "zvariant", @@ -3033,13 +3098,13 @@ dependencies = [ [[package]] name = "zbus-lockstep-macros" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" +checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", "zbus-lockstep", "zbus_xml", "zvariant", @@ -3047,14 +3112,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.18.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" +checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn", "zbus_names", "zvariant", "zvariant_utils", @@ -3062,62 +3127,59 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.4" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", + "static_assertions", "winnow", "zvariant", ] [[package]] name = "zbus_xml" -version = "5.2.1" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1586c021a01ca0a9216dcd874e546382e156a5cbab5fab6cb5f10087e22682a" +checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" dependencies = [ + "quick-xml 0.36.2", "serde", - "winnow", + "static_assertions", "zbus_names", "zvariant", ] [[package]] name = "zerocopy" -version = "0.8.55" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.55" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn", ] -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" - [[package]] name = "zvariant" -version = "5.13.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" +checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac" dependencies = [ "endi", "enumflags2", "serde", + "static_assertions", "winnow", "zvariant_derive", "zvariant_utils", @@ -3125,26 +3187,27 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.13.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" +checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.119", + "syn", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.5.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" +checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.119", + "static_assertions", + "syn", "winnow", ]