From 11de7cbd4aca61a2e3d0504392a1e8e456e6e9be Mon Sep 17 00:00:00 2001 From: Eduardo Flores Date: Sat, 4 May 2024 12:32:01 -0700 Subject: [PATCH] chore: move add applets page to context drawer --- cosmic-settings/src/app.rs | 59 +-------- .../src/pages/desktop/dock/applets.rs | 23 ++-- .../src/pages/desktop/panel/applets_inner.rs | 117 ++++++------------ 3 files changed, 55 insertions(+), 144 deletions(-) diff --git a/cosmic-settings/src/app.rs b/cosmic-settings/src/app.rs index 20676e9..1e88c7c 100644 --- a/cosmic-settings/src/app.rs +++ b/cosmic-settings/src/app.rs @@ -3,8 +3,7 @@ use crate::config::Config; use crate::pages::desktop::{ - self, appearance, - dock::{self, applets::ADD_DOCK_APPLET_DIALOGUE_ID}, + self, appearance, dock, panel::{ self, applets_inner::{self, AppletsPage, APPLET_DND_ICON_ID}, @@ -168,22 +167,6 @@ impl cosmic::Application for SettingsApp { widgets } - fn on_close_requested(&self, id: window::Id) -> Option { - let message = if id == *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID { - Message::PageMessage(crate::pages::Message::PanelApplet( - applets_inner::Message::ClosedAppletDialog, - )) - } else if id == *ADD_DOCK_APPLET_DIALOGUE_ID { - Message::PageMessage(crate::pages::Message::DockApplet(dock::applets::Message( - applets_inner::Message::ClosedAppletDialog, - ))) - } else { - return None; - }; - - Some(message) - } - fn on_escape(&mut self) -> Command { if self.search_active { self.search_active = false; @@ -343,9 +326,7 @@ impl cosmic::Application for SettingsApp { crate::pages::Message::PanelApplet(message) => { if let Some(page) = self.pages.page_mut::() { - return page - .update(message, *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID) - .map(cosmic::app::Message::App); + return page.update(message).map(cosmic::app::Message::App); } } @@ -375,10 +356,7 @@ impl cosmic::Application for SettingsApp { if let Some(page) = self.pages.page_mut::() { return page - .update( - applets_inner::Message::PanelConfig(config), - *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID, - ) + .update(applets_inner::Message::PanelConfig(config)) .map(cosmic::app::Message::App); } } @@ -410,10 +388,7 @@ impl cosmic::Application for SettingsApp { ); if let Some(page) = self.pages.page_mut::() { return page - .update( - applets_inner::Message::Applets(info_list), - *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID, - ) + .update(applets_inner::Message::Applets(info_list)) .map(cosmic::app::Message::App); } } @@ -491,32 +466,6 @@ impl cosmic::Application for SettingsApp { return page.dnd_icon(); } - if let Some(Some(page)) = (id == *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID) - .then(|| self.pages.page::()) - { - return page.add_applet_view(crate::pages::Message::PanelApplet); - } - - if let Some(Some(page)) = - (id == *ADD_DOCK_APPLET_DIALOGUE_ID).then(|| self.pages.page::()) - { - return page.inner().add_applet_view(|msg| { - crate::pages::Message::DockApplet(dock::applets::Message(msg)) - }); - } - - // if let Some(Some(page)) = (id == *keyboard::ADD_INPUT_SOURCE_DIALOGUE_ID) - // .then(|| self.pages.page::()) - // { - // return page.add_input_source_view(); - // } - - // if let Some(Some(page)) = (id == *keyboard::SPECIAL_CHARACTER_DIALOGUE_ID) - // .then(|| self.pages.page::()) - // { - // return page.special_character_key_view(); - // } - if let Some(page) = self.pages.page::() { if id == page.color_dialog { return page.show_color_dialog(); diff --git a/cosmic-settings/src/pages/desktop/dock/applets.rs b/cosmic-settings/src/pages/desktop/dock/applets.rs index 1872816..32e3d8d 100644 --- a/cosmic-settings/src/pages/desktop/dock/applets.rs +++ b/cosmic-settings/src/pages/desktop/dock/applets.rs @@ -1,4 +1,4 @@ -use cosmic::{cosmic_config::CosmicConfigEntry, iced::window, iced_runtime::Command}; +use cosmic::{cosmic_config::CosmicConfigEntry, iced::window, iced_runtime::Command, Element}; use cosmic_panel_config::CosmicPanelConfig; use cosmic_settings_page::{self as page, section, Section}; use once_cell::sync::Lazy; @@ -9,12 +9,12 @@ use crate::{ app, pages::{ self, - desktop::panel::applets_inner::{self, lists, AppletsPage, ReorderWidgetState}, + desktop::panel::applets_inner::{ + self, lists, AppletsPage, ContextDrawer, ReorderWidgetState, + }, }, }; -pub static ADD_DOCK_APPLET_DIALOGUE_ID: Lazy = Lazy::new(window::Id::unique); - pub(crate) struct Page { inner: applets_inner::Page, } @@ -38,7 +38,7 @@ impl Default for Page { current_config, reorder_widget_state: ReorderWidgetState::default(), search: String::new(), - has_dialog: false, + context: None, }, } } @@ -59,7 +59,7 @@ pub struct Message(pub applets_inner::Message); impl Page { pub fn update(&mut self, message: Message) -> Command { - self.inner.update(message.0, *ADD_DOCK_APPLET_DIALOGUE_ID) + self.inner.update(message.0) } } @@ -76,7 +76,16 @@ impl page::Page for Page { fn info(&self) -> page::Info { page::Info::new("dock_applets", "preferences-dock-symbolic") - // .title(fl!("applets")) + } + + fn context_drawer(&self) -> Option> { + Some(match self.inner.context { + Some(ContextDrawer::AddApplet) => self + .inner + .add_applet_view(|msg| crate::pages::Message::DockApplet(Message(msg))), + + None => return None, + }) } } diff --git a/cosmic-settings/src/pages/desktop/panel/applets_inner.rs b/cosmic-settings/src/pages/desktop/panel/applets_inner.rs index c00bd42..4cd4d34 100644 --- a/cosmic-settings/src/pages/desktop/panel/applets_inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/applets_inner.rs @@ -2,8 +2,8 @@ use button::StyleSheet as ButtonStyleSheet; use cosmic::iced_style::container::StyleSheet; use cosmic::widget::{ - button, column, container, header_bar, horizontal_space, icon, list_column, row, scrollable, - text, text_input, Column, + self, button, column, container, header_bar, horizontal_space, icon, list_column, row, + scrollable, text, text_input, Column, }; use cosmic::{ @@ -69,7 +69,6 @@ const SPACING: f32 = 8.0; const DRAG_START_DISTANCE_SQUARED: f32 = 64.0; pub static APPLET_DND_ICON_ID: Lazy = Lazy::new(window::Id::unique); -pub static ADD_PANEL_APPLET_DIALOGUE_ID: Lazy = Lazy::new(window::Id::unique); pub struct Page { pub(crate) available_entries: Vec>, @@ -77,7 +76,7 @@ pub struct Page { pub(crate) current_config: Option, pub(crate) reorder_widget_state: ReorderWidgetState, pub(crate) search: String, - pub(crate) has_dialog: bool, + pub(crate) context: Option, } impl Default for Page { @@ -98,7 +97,7 @@ impl Default for Page { current_config, reorder_widget_state: ReorderWidgetState::default(), search: String::new(), - has_dialog: false, + context: None, } } } @@ -134,6 +133,16 @@ impl page::Page for Page { page::Info::new("panel_applets", "preferences-dock-symbolic") // .title(fl!("applets")) } + + fn context_drawer(&self) -> Option> { + Some(match self.context { + Some(ContextDrawer::AddApplet) => { + self.add_applet_view(crate::pages::Message::PanelApplet) + } + + None => return None, + }) + } } impl page::AutoBind for Page {} @@ -156,9 +165,6 @@ pub enum Message { Search(String), AddApplet(Applet<'static>), AddAppletDialog, - CloseAppletDialog, - ClosedAppletDialog, - DragAppletDialog, Save, Cancel, } @@ -184,13 +190,14 @@ impl Debug for Message { Message::Search(_) => write!(f, "Search"), Message::AddApplet(_) => write!(f, "AddApplet"), Message::AddAppletDialog => write!(f, "AddAppletDialogue"), - Message::CloseAppletDialog => write!(f, "CloseAppletDialogue"), - Message::DragAppletDialog => write!(f, "DragAppletDialogue"), - Message::ClosedAppletDialog => write!(f, "ClosedAppletDialogue"), } } } +pub enum ContextDrawer { + AddApplet, +} + impl Page { pub fn save(&self) { let Some(config) = self.current_config.as_ref() else { @@ -216,7 +223,7 @@ impl Page { pub fn add_applet_view crate::pages::Message + Copy + 'static>( &self, msg_map: T, - ) -> Element { + ) -> Element { let mut list_column = list_column(); let mut has_some = false; for info in self @@ -282,9 +289,7 @@ impl Page { }), }) .padding(8.0) - .on_press(app::Message::PageMessage(msg_map(Message::AddApplet( - info.clone(), - )))) + .on_press(msg_map(Message::AddApplet(info.clone()))) .into(), ]) .padding([0, 32, 0, 32]) @@ -299,48 +304,23 @@ impl Page { .horizontal_alignment(Horizontal::Center), ); } + column::with_children(vec![ - header_bar() - .title(fl!("add-applet")) - .on_close(app::Message::PageMessage(msg_map( - Message::CloseAppletDialog, - ))) - .on_drag(app::Message::PageMessage(msg_map( - Message::DragAppletDialog, - ))) + text_input::search_input(fl!("search-applets"), &self.search) + .on_input(move |s| msg_map(Message::Search(s))) + .on_paste(move |s| msg_map(Message::Search(s))) + .width(Length::Fixed(312.0)) .into(), - container( - scrollable( - column::with_children(vec![ - text(fl!("add-applet")).size(24).width(Length::Fill).into(), - text_input::search_input(fl!("search-applets"), &self.search) - .on_input(move |s| { - app::Message::PageMessage(msg_map(Message::Search(s))) - }) - .on_paste(move |s| { - app::Message::PageMessage(msg_map(Message::Search(s))) - }) - .width(Length::Fixed(312.0)) - .into(), - list_column.into(), - ]) - .padding([0, 64, 32, 64]) - .align_items(Alignment::Center) - .spacing(8.0), - ) - .width(Length::Fill) - .height(Length::Fill), - ) - .style(theme::Container::Background) - .width(Length::Fill) - .height(Length::Fill) - .into(), + scrollable(list_column).into(), ]) + .padding([0, 64, 32, 64]) + .align_items(Alignment::Center) + .spacing(8.0) .into() } #[allow(clippy::too_many_lines)] - pub fn update(&mut self, message: Message, window_id: window::Id) -> Command { + pub fn update(&mut self, message: Message) -> Command { match message { Message::PanelConfig(c) => { self.current_config = Some(c); @@ -464,38 +444,12 @@ impl Page { list.push(applet.id.to_string()); self.save(); - return commands::window::close_window(window_id); } Message::AddAppletDialog => { - self.has_dialog = true; - let window_settings = SctkWindowSettings { - window_id, - app_id: Some("com.system76.CosmicSettings".to_string()), - title: Some(fl!("add-applet")), - parent: Some(window::Id::MAIN), - autosize: false, - size_limits: layout::Limits::NONE - .min_width(300.0) - .max_width(800.0) - .min_height(200.0) - .max_height(1080.0), - size: (512, 420), - resizable: None, - client_decorations: true, - transparent: true, - ..Default::default() - }; - return commands::window::get_window(window_settings); - } - Message::ClosedAppletDialog => { - self.has_dialog = false; - } - Message::CloseAppletDialog => { - self.has_dialog = false; - return commands::window::close_window(window_id); - } - Message::DragAppletDialog => { - return commands::window::start_drag_window(window_id); + self.context = Some(ContextDrawer::AddApplet); + return cosmic::command::message(app::Message::OpenContextDrawer(Cow::Owned(fl!( + "add-applet" + )))); } }; Command::none() @@ -521,8 +475,7 @@ pub fn lists< column::with_children(vec![ row::with_children(vec![ text(fl!("applets")).width(Length::Fill).size(24).into(), - (button.on_press_maybe((!page.has_dialog).then_some(Message::AddAppletDialog))) - .into(), + (button.on_press(Message::AddAppletDialog)).into(), ]) .into(), text(fl!("start-segment")).into(),