improv(applications): convert message types to reduce code gen
This commit is contained in:
parent
e2049df678
commit
3fa3f1f3d7
4 changed files with 53 additions and 41 deletions
|
|
@ -36,6 +36,12 @@ pub enum Message {
|
||||||
Surface(surface::Action),
|
Surface(surface::Action),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Message> for crate::pages::Message {
|
||||||
|
fn from(message: Message) -> Self {
|
||||||
|
crate::pages::Message::LegacyApplications(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Page {
|
pub struct Page {
|
||||||
refresh_pending: Arc<AtomicBool>,
|
refresh_pending: Arc<AtomicBool>,
|
||||||
randr_handle: Option<(oneshot::Sender<()>, cosmic::iced::task::Handle)>,
|
randr_handle: Option<(oneshot::Sender<()>, cosmic::iced::task::Handle)>,
|
||||||
|
|
@ -272,13 +278,13 @@ pub fn legacy_application_global_shortcuts() -> Section<crate::pages::Message> {
|
||||||
let title = widget::text::body(§ion.title).font(cosmic::font::bold());
|
let title = widget::text::body(§ion.title).font(cosmic::font::bold());
|
||||||
let description = widget::text::body(§ion.descriptions[desc]);
|
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![
|
.add(widget::settings::item_row(vec![
|
||||||
widget::radio(
|
widget::radio(
|
||||||
text::body(§ion.descriptions[none]),
|
text::body(§ion.descriptions[none]),
|
||||||
EavesdroppingKeyboardMode::None,
|
EavesdroppingKeyboardMode::None,
|
||||||
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
||||||
Message::SetXwaylandKeyboardMode,
|
|t| Message::SetXwaylandKeyboardMode(t).into(),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -288,7 +294,7 @@ pub fn legacy_application_global_shortcuts() -> Section<crate::pages::Message> {
|
||||||
text::body(§ion.descriptions[modifiers]),
|
text::body(§ion.descriptions[modifiers]),
|
||||||
EavesdroppingKeyboardMode::Modifiers,
|
EavesdroppingKeyboardMode::Modifiers,
|
||||||
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
||||||
Message::SetXwaylandKeyboardMode,
|
|t| Message::SetXwaylandKeyboardMode(t).into(),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -298,7 +304,7 @@ pub fn legacy_application_global_shortcuts() -> Section<crate::pages::Message> {
|
||||||
text::body(§ion.descriptions[combination]),
|
text::body(§ion.descriptions[combination]),
|
||||||
EavesdroppingKeyboardMode::Combinations,
|
EavesdroppingKeyboardMode::Combinations,
|
||||||
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
||||||
Message::SetXwaylandKeyboardMode,
|
|t| Message::SetXwaylandKeyboardMode(t).into(),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -308,7 +314,7 @@ pub fn legacy_application_global_shortcuts() -> Section<crate::pages::Message> {
|
||||||
text::body(§ion.descriptions[all]),
|
text::body(§ion.descriptions[all]),
|
||||||
EavesdroppingKeyboardMode::All,
|
EavesdroppingKeyboardMode::All,
|
||||||
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
Some(page.comp_config_xwayland_eavesdropping.keyboard),
|
||||||
Message::SetXwaylandKeyboardMode,
|
|t| Message::SetXwaylandKeyboardMode(t).into(),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -316,10 +322,8 @@ pub fn legacy_application_global_shortcuts() -> Section<crate::pages::Message> {
|
||||||
.add(widget::settings::item(
|
.add(widget::settings::item(
|
||||||
§ion.descriptions[mouse],
|
§ion.descriptions[mouse],
|
||||||
widget::toggler(page.comp_config_xwayland_eavesdropping.pointer)
|
widget::toggler(page.comp_config_xwayland_eavesdropping.pointer)
|
||||||
.on_toggle(Message::SetXwaylandMouseButtonMode),
|
.on_toggle(|t| Message::SetXwaylandMouseButtonMode(t).into()),
|
||||||
))
|
));
|
||||||
.apply(Element::from)
|
|
||||||
.map(crate::pages::Message::LegacyApplications);
|
|
||||||
|
|
||||||
widget::column::with_capacity(3)
|
widget::column::with_capacity(3)
|
||||||
.push(title)
|
.push(title)
|
||||||
|
|
|
||||||
|
|
@ -114,16 +114,14 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
match &self.context {
|
match &self.context {
|
||||||
Some(Context::AddApplication(directory_type)) => {
|
Some(Context::AddApplication(directory_type)) => {
|
||||||
let search = widget::search_input(fl!("type-to-search"), &self.application_search)
|
let search = widget::search_input(fl!("type-to-search"), &self.application_search)
|
||||||
.on_input(Message::ApplicationSearch)
|
.on_input(|i| Message::ApplicationSearch(i).into())
|
||||||
.on_clear(Message::ApplicationSearch(String::new()))
|
.on_clear(Message::ApplicationSearch(String::new()).into())
|
||||||
.apply(Element::from)
|
.apply(Element::from);
|
||||||
.map(crate::pages::Message::from);
|
|
||||||
|
|
||||||
Some(
|
Some(
|
||||||
cosmic::app::context_drawer(
|
cosmic::app::context_drawer(
|
||||||
self.add_application_context_view(directory_type.clone())
|
self.add_application_context_view(directory_type.clone()),
|
||||||
.map(crate::pages::Message::from),
|
crate::pages::Message::CloseContextDrawer.into(),
|
||||||
crate::pages::Message::CloseContextDrawer,
|
|
||||||
)
|
)
|
||||||
.title(fl!("startup-apps", "search-for-application"))
|
.title(fl!("startup-apps", "search-for-application"))
|
||||||
.header(search),
|
.header(search),
|
||||||
|
|
@ -158,7 +156,7 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
task
|
task
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {
|
fn dialog(&self) -> Option<crate::pages::Element<'_>> {
|
||||||
if let Some(app_to_remove) = &self.app_to_remove {
|
if let Some(app_to_remove) = &self.app_to_remove {
|
||||||
if let Some(cached_startup_apps) = &self.cached_startup_apps {
|
if let Some(cached_startup_apps) = &self.cached_startup_apps {
|
||||||
if let Some(target_directory_type) = &self.target_directory_type {
|
if let Some(target_directory_type) = &self.target_directory_type {
|
||||||
|
|
@ -171,19 +169,21 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
))
|
))
|
||||||
.icon(icon::from_name("dialog-warning").size(64))
|
.icon(icon::from_name("dialog-warning").size(64))
|
||||||
.body(fl!("startup-apps", "remove-dialog-description"))
|
.body(fl!("startup-apps", "remove-dialog-description"))
|
||||||
.primary_action(button::suggested(fl!("remove")).on_press(
|
.primary_action(
|
||||||
Message::RemoveStartupApplication(
|
button::suggested(fl!("remove")).on_press(
|
||||||
target_directory_type.clone(),
|
Message::RemoveStartupApplication(
|
||||||
app_to_remove.clone(),
|
target_directory_type.clone(),
|
||||||
true,
|
app_to_remove.clone(),
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
),
|
),
|
||||||
))
|
)
|
||||||
.secondary_action(
|
.secondary_action(
|
||||||
button::standard(fl!("cancel"))
|
button::standard(fl!("cancel"))
|
||||||
.on_press(Message::CancelRemoveStartupApplication),
|
.on_press(Message::CancelRemoveStartupApplication.into()),
|
||||||
)
|
)
|
||||||
.apply(Element::from)
|
.apply(Element::from),
|
||||||
.map(crate::pages::Message::StartupApps),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -322,7 +322,7 @@ impl Page {
|
||||||
pub fn add_application_context_view(
|
pub fn add_application_context_view(
|
||||||
&self,
|
&self,
|
||||||
directory_type: DirectoryType,
|
directory_type: DirectoryType,
|
||||||
) -> Element<'_, crate::pages::Message> {
|
) -> crate::pages::Element<'_> {
|
||||||
let cosmic::cosmic_theme::Spacing { space_xs, .. } = cosmic::theme::spacing();
|
let cosmic::cosmic_theme::Spacing { space_xs, .. } = cosmic::theme::spacing();
|
||||||
|
|
||||||
let mut list = widget::list_column();
|
let mut list = widget::list_column();
|
||||||
|
|
@ -350,9 +350,15 @@ impl Page {
|
||||||
} else {
|
} else {
|
||||||
row = row.push(text(&app.appid).width(Length::Fill));
|
row = row.push(text(&app.appid).width(Length::Fill));
|
||||||
}
|
}
|
||||||
row = row.push(widget::button::text(fl!("add")).on_press(
|
row = row.push(
|
||||||
Message::AddStartupApplication(directory_type.clone(), app.clone()),
|
widget::button::text(fl!("add")).on_press(
|
||||||
));
|
Message::AddStartupApplication(
|
||||||
|
directory_type.clone(),
|
||||||
|
app.clone(),
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
list = list.add(row)
|
list = list.add(row)
|
||||||
}
|
}
|
||||||
|
|
@ -361,8 +367,7 @@ impl Page {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
list.apply(Element::from)
|
list.into()
|
||||||
.map(crate::pages::Message::StartupApps)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -409,11 +414,14 @@ fn apps() -> Section<crate::pages::Message> {
|
||||||
row = row.push(
|
row = row.push(
|
||||||
button::icon(icon::from_name("edit-delete-symbolic"))
|
button::icon(icon::from_name("edit-delete-symbolic"))
|
||||||
.extra_small()
|
.extra_small()
|
||||||
.on_press(Message::RemoveStartupApplication(
|
.on_press(
|
||||||
directory_type.clone(),
|
Message::RemoveStartupApplication(
|
||||||
app.clone(),
|
directory_type.clone(),
|
||||||
false,
|
app.clone(),
|
||||||
)),
|
false,
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
section = section.add(row)
|
section = section.add(row)
|
||||||
|
|
@ -421,7 +429,7 @@ fn apps() -> Section<crate::pages::Message> {
|
||||||
}
|
}
|
||||||
|
|
||||||
let add_startup_app = widget::button::standard(fl!("startup-apps", "add"))
|
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(
|
view = view.push(section).push(widget::container(
|
||||||
widget::container(add_startup_app)
|
widget::container(add_startup_app)
|
||||||
|
|
@ -431,8 +439,7 @@ fn apps() -> Section<crate::pages::Message> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
view.apply(Element::from)
|
view.into()
|
||||||
.map(crate::pages::Message::StartupApps)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ use slotmap::SlotMap;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::runtime::Handle;
|
|
||||||
use zbus::zvariant::OwnedObjectPath;
|
use zbus::zvariant::OwnedObjectPath;
|
||||||
|
|
||||||
enum Dialog {
|
enum Dialog {
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@ pub mod sound;
|
||||||
pub mod system;
|
pub mod system;
|
||||||
pub mod time;
|
pub mod time;
|
||||||
|
|
||||||
|
pub type Element<'a> = cosmic::Element<'a, Message>;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub enum Message {
|
pub enum Message {
|
||||||
// Page-specific messages
|
// Page-specific messages
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue