From 3fa3f1f3d7999bee2f00a8fb08962dd081f197eb Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 19 Jun 2025 16:12:43 +0200 Subject: [PATCH] improv(applications): convert message types to reduce code gen --- .../pages/applications/legacy_applications.rs | 22 +++--- .../src/pages/applications/startup_apps.rs | 69 ++++++++++--------- cosmic-settings/src/pages/bluetooth/mod.rs | 1 - cosmic-settings/src/pages/mod.rs | 2 + 4 files changed, 53 insertions(+), 41 deletions(-) diff --git a/cosmic-settings/src/pages/applications/legacy_applications.rs b/cosmic-settings/src/pages/applications/legacy_applications.rs index 7afa9e2..f12c66b 100644 --- a/cosmic-settings/src/pages/applications/legacy_applications.rs +++ b/cosmic-settings/src/pages/applications/legacy_applications.rs @@ -36,6 +36,12 @@ pub enum Message { Surface(surface::Action), } +impl From for crate::pages::Message { + fn from(message: Message) -> Self { + crate::pages::Message::LegacyApplications(message) + } +} + pub struct Page { refresh_pending: Arc, randr_handle: Option<(oneshot::Sender<()>, cosmic::iced::task::Handle)>, @@ -272,13 +278,13 @@ pub fn legacy_application_global_shortcuts() -> Section { let title = widget::text::body(§ion.title).font(cosmic::font::bold()); let description = widget::text::body(§ion.descriptions[desc]); - let content = widget::settings::section() + let content = widget::settings::section::<'_, crate::pages::Message>() .add(widget::settings::item_row(vec![ widget::radio( text::body(§ion.descriptions[none]), EavesdroppingKeyboardMode::None, Some(page.comp_config_xwayland_eavesdropping.keyboard), - Message::SetXwaylandKeyboardMode, + |t| Message::SetXwaylandKeyboardMode(t).into(), ) .width(Length::Fill) .into(), @@ -288,7 +294,7 @@ pub fn legacy_application_global_shortcuts() -> Section { text::body(§ion.descriptions[modifiers]), EavesdroppingKeyboardMode::Modifiers, Some(page.comp_config_xwayland_eavesdropping.keyboard), - Message::SetXwaylandKeyboardMode, + |t| Message::SetXwaylandKeyboardMode(t).into(), ) .width(Length::Fill) .into(), @@ -298,7 +304,7 @@ pub fn legacy_application_global_shortcuts() -> Section { text::body(§ion.descriptions[combination]), EavesdroppingKeyboardMode::Combinations, Some(page.comp_config_xwayland_eavesdropping.keyboard), - Message::SetXwaylandKeyboardMode, + |t| Message::SetXwaylandKeyboardMode(t).into(), ) .width(Length::Fill) .into(), @@ -308,7 +314,7 @@ pub fn legacy_application_global_shortcuts() -> Section { text::body(§ion.descriptions[all]), EavesdroppingKeyboardMode::All, Some(page.comp_config_xwayland_eavesdropping.keyboard), - Message::SetXwaylandKeyboardMode, + |t| Message::SetXwaylandKeyboardMode(t).into(), ) .width(Length::Fill) .into(), @@ -316,10 +322,8 @@ pub fn legacy_application_global_shortcuts() -> Section { .add(widget::settings::item( §ion.descriptions[mouse], widget::toggler(page.comp_config_xwayland_eavesdropping.pointer) - .on_toggle(Message::SetXwaylandMouseButtonMode), - )) - .apply(Element::from) - .map(crate::pages::Message::LegacyApplications); + .on_toggle(|t| Message::SetXwaylandMouseButtonMode(t).into()), + )); widget::column::with_capacity(3) .push(title) diff --git a/cosmic-settings/src/pages/applications/startup_apps.rs b/cosmic-settings/src/pages/applications/startup_apps.rs index 20f425e..58bcbc1 100644 --- a/cosmic-settings/src/pages/applications/startup_apps.rs +++ b/cosmic-settings/src/pages/applications/startup_apps.rs @@ -114,16 +114,14 @@ impl page::Page for Page { match &self.context { Some(Context::AddApplication(directory_type)) => { let search = widget::search_input(fl!("type-to-search"), &self.application_search) - .on_input(Message::ApplicationSearch) - .on_clear(Message::ApplicationSearch(String::new())) - .apply(Element::from) - .map(crate::pages::Message::from); + .on_input(|i| Message::ApplicationSearch(i).into()) + .on_clear(Message::ApplicationSearch(String::new()).into()) + .apply(Element::from); Some( cosmic::app::context_drawer( - self.add_application_context_view(directory_type.clone()) - .map(crate::pages::Message::from), - crate::pages::Message::CloseContextDrawer, + self.add_application_context_view(directory_type.clone()), + crate::pages::Message::CloseContextDrawer.into(), ) .title(fl!("startup-apps", "search-for-application")) .header(search), @@ -158,7 +156,7 @@ impl page::Page for Page { task } - fn dialog(&self) -> Option> { + fn dialog(&self) -> Option> { if let Some(app_to_remove) = &self.app_to_remove { if let Some(cached_startup_apps) = &self.cached_startup_apps { if let Some(target_directory_type) = &self.target_directory_type { @@ -171,19 +169,21 @@ impl page::Page for Page { )) .icon(icon::from_name("dialog-warning").size(64)) .body(fl!("startup-apps", "remove-dialog-description")) - .primary_action(button::suggested(fl!("remove")).on_press( - Message::RemoveStartupApplication( - target_directory_type.clone(), - app_to_remove.clone(), - true, + .primary_action( + button::suggested(fl!("remove")).on_press( + Message::RemoveStartupApplication( + target_directory_type.clone(), + app_to_remove.clone(), + true, + ) + .into(), ), - )) + ) .secondary_action( button::standard(fl!("cancel")) - .on_press(Message::CancelRemoveStartupApplication), + .on_press(Message::CancelRemoveStartupApplication.into()), ) - .apply(Element::from) - .map(crate::pages::Message::StartupApps), + .apply(Element::from), ); } } @@ -322,7 +322,7 @@ impl Page { pub fn add_application_context_view( &self, directory_type: DirectoryType, - ) -> Element<'_, crate::pages::Message> { + ) -> crate::pages::Element<'_> { let cosmic::cosmic_theme::Spacing { space_xs, .. } = cosmic::theme::spacing(); let mut list = widget::list_column(); @@ -350,9 +350,15 @@ impl Page { } else { row = row.push(text(&app.appid).width(Length::Fill)); } - row = row.push(widget::button::text(fl!("add")).on_press( - Message::AddStartupApplication(directory_type.clone(), app.clone()), - )); + row = row.push( + widget::button::text(fl!("add")).on_press( + Message::AddStartupApplication( + directory_type.clone(), + app.clone(), + ) + .into(), + ), + ); list = list.add(row) } @@ -361,8 +367,7 @@ impl Page { } } - list.apply(Element::from) - .map(crate::pages::Message::StartupApps) + list.into() } } @@ -409,11 +414,14 @@ fn apps() -> Section { row = row.push( button::icon(icon::from_name("edit-delete-symbolic")) .extra_small() - .on_press(Message::RemoveStartupApplication( - directory_type.clone(), - app.clone(), - false, - )), + .on_press( + Message::RemoveStartupApplication( + directory_type.clone(), + app.clone(), + false, + ) + .into(), + ), ); section = section.add(row) @@ -421,7 +429,7 @@ fn apps() -> Section { } let add_startup_app = widget::button::standard(fl!("startup-apps", "add")) - .on_press(Message::ShowApplicationSidebar(directory_type.clone())); + .on_press(Message::ShowApplicationSidebar(directory_type.clone()).into()); view = view.push(section).push(widget::container( widget::container(add_startup_app) @@ -431,8 +439,7 @@ fn apps() -> Section { } } - view.apply(Element::from) - .map(crate::pages::Message::StartupApps) + view.into() }) } diff --git a/cosmic-settings/src/pages/bluetooth/mod.rs b/cosmic-settings/src/pages/bluetooth/mod.rs index 6cd81b8..b84030d 100644 --- a/cosmic-settings/src/pages/bluetooth/mod.rs +++ b/cosmic-settings/src/pages/bluetooth/mod.rs @@ -14,7 +14,6 @@ use slotmap::SlotMap; use std::collections::{HashMap, HashSet}; use std::sync::Arc; use std::time::Duration; -use tokio::runtime::Handle; use zbus::zvariant::OwnedObjectPath; enum Dialog { diff --git a/cosmic-settings/src/pages/mod.rs b/cosmic-settings/src/pages/mod.rs index 8ab1864..a2eab2e 100644 --- a/cosmic-settings/src/pages/mod.rs +++ b/cosmic-settings/src/pages/mod.rs @@ -22,6 +22,8 @@ pub mod sound; pub mod system; pub mod time; +pub type Element<'a> = cosmic::Element<'a, Message>; + #[derive(Clone, Debug)] pub enum Message { // Page-specific messages