diff --git a/Cargo.toml b/Cargo.toml index 21addb80..1fced16c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ rust-version = "1.80" name = "cosmic" [features] -default = ["multi-window"] +default = ["multi-window", "a11y"] # Accessibility support a11y = ["iced/a11y", "iced_accessibility"] # Enable about widget diff --git a/iced b/iced index 32972639..deb719e1 160000 --- a/iced +++ b/iced @@ -1 +1 @@ -Subproject commit 3297263977365a5d7e4c4cd9bbc13613b674763b +Subproject commit deb719e147ddcfee2c2cb52c9ca7a7b04fcd025a diff --git a/src/widget/aspect_ratio.rs b/src/widget/aspect_ratio.rs index 2bfa702c..ec8e2bed 100644 --- a/src/widget/aspect_ratio.rs +++ b/src/widget/aspect_ratio.rs @@ -252,6 +252,17 @@ where ) -> Option> { self.container.overlay(tree, layout, renderer, translation) } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + self.container.a11y_nodes(layout, state, p) + } } impl<'a, Message, Renderer> From> diff --git a/src/widget/autosize.rs b/src/widget/autosize.rs index 553f9ea7..e9ed4d0b 100644 --- a/src/widget/autosize.rs +++ b/src/widget/autosize.rs @@ -230,12 +230,9 @@ where renderer: &Renderer, translation: Vector, ) -> Option> { - self.content.as_widget_mut().overlay( - &mut tree.children[0], - layout.children().next().unwrap(), - renderer, - translation, - ) + self.content + .as_widget_mut() + .overlay(&mut tree.children[0], layout, renderer, translation) } fn drag_destinations( @@ -261,6 +258,19 @@ where fn set_id(&mut self, id: crate::widget::Id) { self.id = id; } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_layout = layout.children().next().unwrap(); + let c_state = &state.children[0]; + self.content.as_widget().a11y_nodes(c_layout, c_state, p) + } } impl<'a, Message, Theme, Renderer> From> diff --git a/src/widget/context_drawer/widget.rs b/src/widget/context_drawer/widget.rs index 759749fe..6c55d30c 100644 --- a/src/widget/context_drawer/widget.rs +++ b/src/widget/context_drawer/widget.rs @@ -284,9 +284,8 @@ impl<'a, Message: Clone> Widget for ContextDraw state: &Tree, p: mouse::Cursor, ) -> iced_accessibility::A11yTree { - let c_layout = layout.children().next().unwrap(); let c_state = &state.children[0]; - self.content.as_widget().a11y_nodes(c_layout, c_state, p) + self.content.as_widget().a11y_nodes(layout, c_state, p) } fn drag_destinations( diff --git a/src/widget/context_menu.rs b/src/widget/context_menu.rs index ce0c94e7..338775b9 100644 --- a/src/widget/context_menu.rs +++ b/src/widget/context_menu.rs @@ -251,6 +251,18 @@ impl<'a, Message: Clone> Widget .overlay(), ) } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: iced_core::Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_state = &state.children[0]; + self.content.as_widget().a11y_nodes(layout, c_state, p) + } } impl<'a, Message: Clone + 'a> From> for crate::Element<'a, Message> { diff --git a/src/widget/dnd_destination.rs b/src/widget/dnd_destination.rs index 6afac4df..f429f12a 100644 --- a/src/widget/dnd_destination.rs +++ b/src/widget/dnd_destination.rs @@ -541,6 +541,18 @@ impl<'a, Message: 'static> Widget fn set_id(&mut self, id: Id) { self.id = id; } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: iced_core::Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_state = &state.children[0]; + self.container.as_widget().a11y_nodes(layout, c_state, p) + } } #[derive(Default)] diff --git a/src/widget/dnd_source.rs b/src/widget/dnd_source.rs index 80328120..38b921ee 100644 --- a/src/widget/dnd_source.rs +++ b/src/widget/dnd_source.rs @@ -381,6 +381,18 @@ impl< fn set_id(&mut self, id: Id) { self.id = id; } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: iced_core::Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_state = &state.children[0]; + self.container.as_widget().a11y_nodes(layout, c_state, p) + } } impl< diff --git a/src/widget/dropdown/widget.rs b/src/widget/dropdown/widget.rs index 3ff76ee1..20d46a20 100644 --- a/src/widget/dropdown/widget.rs +++ b/src/widget/dropdown/widget.rs @@ -246,6 +246,17 @@ impl<'a, S: AsRef, Message: 'a> Widget, + // state: &Tree, + // p: mouse::Cursor, + // ) -> iced_accessibility::A11yTree { + // // TODO + // } } impl<'a, S: AsRef, Message: 'a> From> diff --git a/src/widget/header_bar.rs b/src/widget/header_bar.rs index d9ba249f..972f92a4 100644 --- a/src/widget/header_bar.rs +++ b/src/widget/header_bar.rs @@ -265,6 +265,23 @@ impl<'a, Message: Clone + 'static> Widget, + state: &tree::Tree, + p: iced::mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_layout = layout.children().next().unwrap(); + let c_state = &state.children[0]; + let ret = self + .header_bar_inner + .as_widget() + .a11y_nodes(c_layout, c_state, p); + ret + } } impl<'a, Message: Clone + 'static> HeaderBar<'a, Message> { diff --git a/src/widget/id_container.rs b/src/widget/id_container.rs index 9be387a5..ae19d088 100644 --- a/src/widget/id_container.rs +++ b/src/widget/id_container.rs @@ -165,12 +165,9 @@ where renderer: &Renderer, translation: Vector, ) -> Option> { - self.content.as_widget_mut().overlay( - &mut tree.children[0], - layout.children().next().unwrap(), - renderer, - translation, - ) + self.content + .as_widget_mut() + .overlay(&mut tree.children[0], layout, renderer, translation) } fn drag_destinations( @@ -196,6 +193,19 @@ where fn set_id(&mut self, id: crate::widget::Id) { self.id = id; } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_layout = layout.children().next().unwrap(); + let c_state = &state.children[0]; + self.content.as_widget().a11y_nodes(c_layout, c_state, p) + } } impl<'a, Message, Theme, Renderer> From> diff --git a/src/widget/layer_container.rs b/src/widget/layer_container.rs index 3109e666..016932b4 100644 --- a/src/widget/layer_container.rs +++ b/src/widget/layer_container.rs @@ -274,6 +274,17 @@ where fn set_id(&mut self, id: crate::widget::Id) { self.container.set_id(id); } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: iced_core::Layout<'_>, + state: &Tree, + p: iced::mouse::Cursor, + ) -> iced_accessibility::A11yTree { + self.container.a11y_nodes(layout, state, p) + } } impl<'a, Message, Renderer> From> diff --git a/src/widget/popover.rs b/src/widget/popover.rs index 4eb50ea2..974153d3 100644 --- a/src/widget/popover.rs +++ b/src/widget/popover.rs @@ -273,6 +273,18 @@ where dnd_rectangles, ); } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + let c_state = &state.children[0]; + self.content.as_widget().a11y_nodes(layout, c_state, p) + } } impl<'a, Message, Renderer> From> diff --git a/src/widget/rectangle_tracker/mod.rs b/src/widget/rectangle_tracker/mod.rs index 30eed770..876b1255 100644 --- a/src/widget/rectangle_tracker/mod.rs +++ b/src/widget/rectangle_tracker/mod.rs @@ -309,6 +309,17 @@ where self.container .drag_destinations(state, layout, renderer, dnd_rectangles); } + + #[cfg(feature = "a11y")] + /// get the a11y nodes for the widget + fn a11y_nodes( + &self, + layout: Layout<'_>, + state: &Tree, + p: mouse::Cursor, + ) -> iced_accessibility::A11yTree { + self.container.a11y_nodes(layout, state, p) + } } impl<'a, Message, Renderer, I> From>