diff --git a/cosmic-settings/src/pages/accessibility/mod.rs b/cosmic-settings/src/pages/accessibility/mod.rs index 37d9026..144dfc3 100644 --- a/cosmic-settings/src/pages/accessibility/mod.rs +++ b/cosmic-settings/src/pages/accessibility/mod.rs @@ -13,9 +13,7 @@ use cosmic_settings_page::{ self as page, Insert, section::{self, Section}, }; -use cosmic_settings_subscriptions::accessibility::{ - DBusRequest, DBusUpdate, subscription as a11y_subscription, -}; +use cosmic_settings_subscriptions::accessibility::{DBusRequest, DBusUpdate, subscription as a11y_subscription}; use cosmic_settings_subscriptions::cosmic_a11y_manager; use num_traits::FromPrimitive; use slotmap::SlotMap; @@ -165,11 +163,10 @@ impl page::Page for Page { cosmic::Task::none() } - fn subscription( - &self, - _core: &cosmic::Core, - ) -> cosmic::iced::Subscription { - a11y_subscription().map(|m| super::Message::Accessibility(Message::DBusUpdate(m))) + fn subscription(&self, _core: &cosmic::Core) -> cosmic::iced::Subscription { + a11y_subscription().map(|m| { + super::Message::Accessibility(Message::DBusUpdate(m)) + }) } } @@ -201,13 +198,10 @@ pub fn vision() -> section::Section { settings::section() .title(§ion.title) - .add( - cosmic::Element::from( - settings::item::builder(&descriptions[screen_reader]) - .toggler(page.reader_enabled, Message::ScreenReaderEnabled), - ) - .map(crate::pages::Message::Accessibility), - ) + .add(settings::item::builder(&descriptions[screen_reader]) + .toggler(page.reader_enabled, |enabled| { + crate::pages::Message::from(Message::ScreenReaderEnabled(enabled)) + })) .add({ let (magnifier_entity, _magnifier_info) = binder .info @@ -230,66 +224,46 @@ pub fn vision() -> section::Section { text::body(status_text).wrapping(Wrapping::Word), page.wayland_available .is_some() - .then_some(crate::pages::Message::Page(magnifier_entity)), + .then_some(crate::pages::Message::Page(magnifier_entity).into()), ) }) - .add( - cosmic::Element::from( - settings::item::builder(&descriptions[high_contrast]) - .toggler(page.theme.is_high_contrast, Message::HighContrast), - ) - .map(crate::pages::Message::Accessibility), - ) - .add( - cosmic::Element::from( - settings::item::builder(&descriptions[invert_colors]).control( + .add(settings::item::builder(&descriptions[high_contrast]) + .toggler(page.theme.is_high_contrast, |enable| Message::HighContrast(enable).into())) + .add(settings::item::builder(&descriptions[invert_colors]).control( toggler(page.screen_inverted).on_toggle_maybe( page.wayland_available .is_some_and(|ver| ver >= 2) - .then_some(Message::SetScreenInverted), + .then_some(|set| Message::SetScreenInverted(set).into()), ), - ), - ) - .map(crate::pages::Message::Accessibility), - ) - .add({ - cosmic::Element::from( - settings::item::builder(&descriptions[color_filters]).control( + )) + .add(settings::item::builder(&descriptions[color_filters]).control( toggler(page.screen_filter_active).on_toggle_maybe( page.wayland_available .is_some_and(|ver| ver >= 2) - .then_some(Message::SetScreenFilterActive), + .then_some(|set| Message::SetScreenFilterActive(set).into()), ), - ), - ) - .map(crate::pages::Message::Accessibility) - }) + )) .add({ let selections = if page.screen_filter_selection == ColorFilter::Unknown { &page.screen_filter_selections } else { &page.screen_filter_selections[0..4] }; - cosmic::Element::from( - settings::item::builder(&descriptions[color_filter_type]).control( - dropdown::popup_dropdown( - selections, - Some(page.screen_filter_selection as usize), - move |idx| { - let filter = ColorFilter::from_usize(idx).unwrap_or_default(); - Message::SetScreenFilterSelection(filter) - }, - cosmic::iced::window::Id::RESERVED, - Message::Surface, - |a| { - crate::app::Message::PageMessage( - crate::pages::Message::Accessibility(a), - ) - }, - ), - ), - ) - .map(crate::pages::Message::Accessibility) + + let dropdown = dropdown::popup_dropdown::<_, crate::pages::Message, crate::pages::Message>( + selections, + Some(page.screen_filter_selection as usize), + move |idx| { + let filter = ColorFilter::from_usize(idx).unwrap_or_default(); + Message::SetScreenFilterSelection(filter).into() + }, + cosmic::iced::window::Id::RESERVED, + |action| Message::Surface(action).into(), + |a| a + ); + + settings::item::builder(&descriptions[color_filter_type]) + .control(dropdown) }) .into() })