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,
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<crate::pages::Message> for Page {
cosmic::Task::none()
}
fn subscription(
&self,
_core: &cosmic::Core,
) -> cosmic::iced::Subscription<crate::pages::Message> {
a11y_subscription().map(|m| super::Message::Accessibility(Message::DBusUpdate(m)))
fn subscription(&self, _core: &cosmic::Core) -> 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()
.title(&section.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<crate::pages::Message> {
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()
})