perf(accessibility): consolidate message types in view to reduce code gen

This commit is contained in:
Michael Aaron Murphy 2025-06-04 07:53:47 +02:00
parent c5bdce7385
commit 1e05e146f2
No known key found for this signature in database
GPG key ID: B2732D4240C9212C

View file

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