diff --git a/cosmic-settings/src/app.rs b/cosmic-settings/src/app.rs index 0b9f814..cdf92d0 100644 --- a/cosmic-settings/src/app.rs +++ b/cosmic-settings/src/app.rs @@ -150,7 +150,7 @@ pub enum Message { DesktopInfo, Error(String), None, - OpenContextDrawer(Entity, Cow<'static, str>), + OpenContextDrawer(Entity), #[cfg(feature = "wayland")] OutputAdded(OutputInfo, WlOutput), #[cfg(feature = "wayland")] @@ -756,10 +756,9 @@ impl cosmic::Application for SettingsApp { Message::SetTheme(t) => return cosmic::command::set_theme(t), - Message::OpenContextDrawer(page, title) => { + Message::OpenContextDrawer(page) => { self.core.window.show_context = true; self.active_context_page = Some(page); - self.context_title = Some(title.to_string()); } Message::Error(error) => { @@ -1124,8 +1123,6 @@ impl SettingsApp { /// Displays the sub-pages view of a page. fn sub_page_view(&self, sub_pages: &[page::Entity]) -> cosmic::Element { - let theme = cosmic::theme::active(); - let page_list = sub_pages .iter() .copied() @@ -1143,7 +1140,7 @@ impl SettingsApp { )) }, ) - .spacing(theme.cosmic().space_s()) + .spacing(cosmic::theme::spacing().space_s) .apply(|widget| scrollable(self.page_container(widget)).height(Length::Fill)) .apply(Element::from) .map(Message::Page); diff --git a/cosmic-settings/src/pages/applications/startup_apps.rs b/cosmic-settings/src/pages/applications/startup_apps.rs index e8bded8..a5b00f8 100644 --- a/cosmic-settings/src/pages/applications/startup_apps.rs +++ b/cosmic-settings/src/pages/applications/startup_apps.rs @@ -112,11 +112,23 @@ impl page::Page for Page { fn context_drawer(&self) -> Option> { match &self.context { - Some(Context::AddApplication(directory_type)) => Some(cosmic::app::context_drawer( - self.add_application_context_view(directory_type.clone()) - .map(crate::pages::Message::from), - crate::pages::Message::CloseContextDrawer, - )), + 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); + + Some( + cosmic::app::context_drawer( + self.add_application_context_view(directory_type.clone()) + .map(crate::pages::Message::from), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("startup-apps", "search-for-application")) + .header(search), + ) + } None => None, } } @@ -203,10 +215,7 @@ impl Page { } Message::ShowApplicationSidebar(directory_type) => { self.context = Some(Context::AddApplication(directory_type)); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("startup-apps", "search-for-application").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::AddStartupApplication(directory_type, app) => { let mut file_name = app.clone().appid; @@ -311,13 +320,7 @@ impl Page { &self, directory_type: DirectoryType, ) -> Element<'_, crate::pages::Message> { - let cosmic::cosmic_theme::Spacing { - space_xs, space_l, .. - } = cosmic::theme::spacing(); - - let search = widget::search_input(fl!("type-to-search"), &self.application_search) - .on_input(Message::ApplicationSearch) - .on_clear(Message::ApplicationSearch(String::new())); + let cosmic::cosmic_theme::Spacing { space_xs, .. } = cosmic::theme::spacing(); let mut list = widget::list_column(); let search_input = &self.application_search.trim().to_lowercase(); @@ -355,12 +358,7 @@ impl Page { } } - widget::column() - .padding([2, 0]) - .spacing(space_l) - .push(search) - .push(list) - .apply(Element::from) + list.apply(Element::from) .map(crate::pages::Message::StartupApps) } } diff --git a/cosmic-settings/src/pages/desktop/appearance/font_config.rs b/cosmic-settings/src/pages/desktop/appearance/font_config.rs index d059546..d2ebc01 100644 --- a/cosmic-settings/src/pages/desktop/appearance/font_config.rs +++ b/cosmic-settings/src/pages/desktop/appearance/font_config.rs @@ -8,7 +8,6 @@ use cosmic::{ Apply, Element, Task, config::{CosmicTk, FontConfig}, iced_core::text::Wrapping, - theme, widget::{self, settings, svg}, }; use cosmic_config::ConfigSet; @@ -65,20 +64,13 @@ pub fn load_font_families() -> (Vec>, Vec>) { pub fn selection_context<'a>( families: &'a [Arc], - search: &'a str, current_font: &str, system: bool, ) -> Element<'a, super::Message> { - let space_l = theme::active().cosmic().spacing.space_l; - let svg_accent = Rc::new(|theme: &cosmic::Theme| svg::Style { color: Some(theme.cosmic().accent_color().into()), }); - let search_input = widget::search_input(fl!("type-to-search"), search) - .on_input(super::Message::FontSearch) - .on_clear(super::Message::FontSearch(String::new())); - let list = families.iter().fold(widget::list_column(), |list, family| { let selected = &**family == current_font; list.add( @@ -105,12 +97,7 @@ pub fn selection_context<'a>( ) }); - widget::column() - .padding([2, 0]) - .spacing(space_l) - .push(search_input) - .push(list) - .into() + list.into() } /// Set the preferred icon theme for GNOME/GTK applications. diff --git a/cosmic-settings/src/pages/desktop/appearance/mod.rs b/cosmic-settings/src/pages/desktop/appearance/mod.rs index 896d224..68df2c2 100644 --- a/cosmic-settings/src/pages/desktop/appearance/mod.rs +++ b/cosmic-settings/src/pages/desktop/appearance/mod.rs @@ -7,7 +7,7 @@ pub mod icon_themes; use std::borrow::Cow; use std::sync::Arc; -use cosmic::app::ContextDrawer; +use cosmic::app::{ContextDrawer, context_drawer}; //TODO: use embedded cosmic-files for portability use cosmic::config::CosmicTk; use cosmic::cosmic_config::{Config, ConfigSet, CosmicConfigEntry}; @@ -19,7 +19,6 @@ use cosmic::cosmic_theme::{ #[cfg(feature = "xdg-portal")] use cosmic::dialog::file_chooser::{self, FileFilter}; use cosmic::iced_core::{Alignment, Color, Length}; -use cosmic::iced_widget::scrollable::{Direction, Scrollbar}; use cosmic::widget::icon::{from_name, icon}; use cosmic::widget::{ ColorPickerModel, button, color_picker::ColorPickerUpdate, container, flex_row, @@ -469,9 +468,14 @@ impl From for Roundness { impl Page { fn icons_and_toolkit(&self) -> Element<'_, crate::pages::Message> { + let Spacing { + space_xxs, + space_xs, + space_m, + .. + } = cosmic::theme::spacing(); + let active = self.icon_theme_active; - let theme = cosmic::theme::active(); - let theme = theme.cosmic(); cosmic::iced::widget::column![ // Export theme choice settings::section().add( @@ -496,15 +500,15 @@ impl Page { }) .collect(), ) - .row_spacing(theme.space_xs()) - .column_spacing(theme.space_xs()) + .row_spacing(space_xs) + .column_spacing(space_xs) .apply(container) .center_x(Length::Fill) .into() ]) - .spacing(theme.space_xxs()) + .spacing(space_xxs) ] - .spacing(theme.space_m()) + .spacing(space_m) .width(Length::Fill) .apply(Element::from) .map(crate::pages::Message::Appearance) @@ -522,20 +526,14 @@ impl Page { self.context_view = Some(ContextView::MonospaceFont); self.font_search.clear(); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("monospace-font").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::DisplaySystemFont => { self.context_view = Some(ContextView::SystemFont); self.font_search.clear(); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("interface-font").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::FontConfig(message) => { @@ -627,11 +625,8 @@ impl Page { Message::AccentWindowHint(u) => { needs_sync = true; - let (task, needs_update) = self.update_color_picker( - &u, - ContextView::AccentWindowHint, - fl!("window-hint-accent").into(), - ); + let (task, needs_update) = + self.update_color_picker(&u, ContextView::AccentWindowHint); tasks.push(task); tasks.push(self.accent_window_hint.update::(u)); @@ -718,11 +713,8 @@ impl Page { } Message::ApplicationBackground(u) => { - let (task, needs_update) = self.update_color_picker( - &u, - ContextView::ApplicationBackground, - fl!("app-background").into(), - ); + let (task, needs_update) = + self.update_color_picker(&u, ContextView::ApplicationBackground); tasks.push(task); tasks.push(self.application_background.update::(u)); @@ -745,11 +737,8 @@ impl Page { } Message::ContainerBackground(u) => { - let (task, needs_update) = self.update_color_picker( - &u, - ContextView::ContainerBackground, - fl!("container-background").into(), - ); + let (task, needs_update) = + self.update_color_picker(&u, ContextView::ContainerBackground); tasks.push(task); tasks.push(self.container_background.update::(u)); @@ -772,11 +761,7 @@ impl Page { } Message::CustomAccent(u) => { - let (task, needs_update) = self.update_color_picker( - &u, - ContextView::CustomAccent, - fl!("accent-color").into(), - ); + let (task, needs_update) = self.update_color_picker(&u, ContextView::CustomAccent); tasks.push(task); tasks.push(self.custom_accent.update::(u)); @@ -797,11 +782,7 @@ impl Page { } Message::InterfaceText(u) => { - let (task, needs_update) = self.update_color_picker( - &u, - ContextView::InterfaceText, - fl!("text-tint").into(), - ); + let (task, needs_update) = self.update_color_picker(&u, ContextView::InterfaceText); tasks.push(task); tasks.push(self.interface_text.update::(u)); @@ -822,11 +803,8 @@ impl Page { } Message::ControlComponent(u) => { - let (task, needs_update) = self.update_color_picker( - &u, - ContextView::ControlComponent, - fl!("control-tint").into(), - ); + let (task, needs_update) = + self.update_color_picker(&u, ContextView::ControlComponent); tasks.push(task); tasks.push(self.control_component.update::(u)); @@ -1196,7 +1174,7 @@ impl Page { self.context_view = Some(ContextView::IconsAndToolkit); let mut tasks = Vec::new(); tasks.push(cosmic::task::message( - crate::app::Message::OpenContextDrawer(self.entity, "".into()), + crate::app::Message::OpenContextDrawer(self.entity), )); if !self.icons_fetched { self.icons_fetched = true; @@ -1336,7 +1314,6 @@ impl Page { &mut self, message: &ColorPickerUpdate, context_view: ContextView, - context_title: Cow<'static, str>, ) -> (Task, bool) { let mut needs_update = false; @@ -1357,10 +1334,7 @@ impl Page { ColorPickerUpdate::ToggleColorPicker => { self.context_view = Some(context_view); - cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - context_title, - )) + cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)) } _ => Task::none(), @@ -1623,54 +1597,78 @@ impl page::Page for Page { } fn context_drawer(&self) -> Option> { - let view = match self.context_view? { - ContextView::AccentWindowHint => color_picker_context_view( - None, - RESET_TO_DEFAULT.as_str().into(), - Message::AccentWindowHint, - &self.accent_window_hint, + Some(match self.context_view? { + ContextView::AccentWindowHint => context_drawer( + color_picker_context_view( + None, + RESET_TO_DEFAULT.as_str().into(), + Message::AccentWindowHint, + &self.accent_window_hint, + ) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance), + .title(fl!("window-hint-accent")), - ContextView::ApplicationBackground => color_picker_context_view( - None, - RESET_TO_DEFAULT.as_str().into(), - Message::ApplicationBackground, - &self.application_background, + ContextView::ApplicationBackground => context_drawer( + color_picker_context_view( + None, + RESET_TO_DEFAULT.as_str().into(), + Message::ApplicationBackground, + &self.application_background, + ) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance), + .title(fl!("app-background")), - ContextView::ContainerBackground => color_picker_context_view( - Some(fl!("container-background", "desc-detail").into()), - fl!("container-background", "reset").into(), - Message::ContainerBackground, - &self.container_background, + ContextView::ContainerBackground => context_drawer( + color_picker_context_view( + Some(fl!("container-background", "desc-detail").into()), + fl!("container-background", "reset").into(), + Message::ContainerBackground, + &self.container_background, + ) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance), + .title(fl!("container-background")), - ContextView::ControlComponent => color_picker_context_view( - None, - RESET_TO_DEFAULT.as_str().into(), - Message::ControlComponent, - &self.control_component, + ContextView::ControlComponent => context_drawer( + color_picker_context_view( + None, + RESET_TO_DEFAULT.as_str().into(), + Message::ControlComponent, + &self.control_component, + ) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance), + .title(fl!("control-tint")), - ContextView::CustomAccent => color_picker_context_view( - None, - RESET_TO_DEFAULT.as_str().into(), - Message::CustomAccent, - &self.custom_accent, + ContextView::CustomAccent => context_drawer( + color_picker_context_view( + None, + RESET_TO_DEFAULT.as_str().into(), + Message::CustomAccent, + &self.custom_accent, + ) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance), + .title(fl!("accent-color")), - ContextView::InterfaceText => color_picker_context_view( - None, - RESET_TO_DEFAULT.as_str().into(), - Message::InterfaceText, - &self.interface_text, + ContextView::InterfaceText => context_drawer( + color_picker_context_view( + None, + RESET_TO_DEFAULT.as_str().into(), + Message::InterfaceText, + &self.interface_text, + ) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance), + .title(fl!("text-tint")), ContextView::SystemFont => { let filter = if self.font_search.is_empty() { @@ -1678,16 +1676,21 @@ impl page::Page for Page { } else { &self.font_filter }; + let search_input = widget::search_input(fl!("type-to-search"), &self.font_search) + .on_input(Message::FontSearch) + .on_clear(Message::FontSearch(String::new())) + .apply(Element::from) + .map(crate::pages::Message::Appearance); let current_font = cosmic::config::interface_font(); - font_config::selection_context( - filter, - &self.font_search, - current_font.family.as_str(), - true, + context_drawer( + font_config::selection_context(filter, current_font.family.as_str(), true) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance) + .title(fl!("interface-font")) + .header(search_input) } ContextView::MonospaceFont => { @@ -1696,25 +1699,28 @@ impl page::Page for Page { } else { &self.font_filter }; + let search_input = widget::search_input(fl!("type-to-search"), &self.font_search) + .on_input(Message::FontSearch) + .on_clear(Message::FontSearch(String::new())) + .apply(Element::from) + .map(crate::pages::Message::Appearance); let current_font = cosmic::config::monospace_font(); - font_config::selection_context( - filter, - &self.font_search, - current_font.family.as_str(), - false, + context_drawer( + font_config::selection_context(filter, current_font.family.as_str(), false) + .map(crate::pages::Message::Appearance), + crate::pages::Message::CloseContextDrawer, ) - .map(crate::pages::Message::Appearance) + .title(fl!("monospace-font")) + .header(search_input) } - ContextView::IconsAndToolkit => self.icons_and_toolkit(), - }; - - Some(cosmic::app::context_drawer( - view, - crate::pages::Message::CloseContextDrawer, - )) + ContextView::IconsAndToolkit => context_drawer( + self.icons_and_toolkit(), + crate::pages::Message::CloseContextDrawer, + ), + }) } } @@ -1745,7 +1751,7 @@ pub fn mode_and_colors() -> Section { .title(fl!("mode-and-colors")) .descriptions(descriptions) .view::(move |_binder, page, section| { - let Spacing { space_xxs, .. } = cosmic::theme::active().cosmic().spacing; + let Spacing { space_xxs, .. } = cosmic::theme::spacing(); let descriptions = §ion.descriptions; let palette = &page.theme_builder.palette.as_ref(); @@ -1779,7 +1785,7 @@ pub fn mode_and_colors() -> Section { let accent_color_palette = cosmic::iced::widget::column![ text::body(&descriptions[accent_color]), - scrollable( + scrollable::horizontal( accent_palette_row .push(if let Some(c) = page.custom_accent.get_applied_color() { container(color_button( @@ -1800,7 +1806,6 @@ pub fn mode_and_colors() -> Section { .padding([0, 0, 16, 0]) .spacing(16) ) - .direction(Direction::Horizontal(Scrollbar::new())) ] .padding([16, 0, 0, 0]) .spacing(space_xxs); diff --git a/cosmic-settings/src/pages/desktop/panel/applets_inner.rs b/cosmic-settings/src/pages/desktop/panel/applets_inner.rs index 505653d..4c27d50 100644 --- a/cosmic-settings/src/pages/desktop/panel/applets_inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/applets_inner.rs @@ -120,9 +120,7 @@ impl page::Page for Page { } fn header_view(&self) -> Option> { - let space_xxs = theme::active().cosmic().spacing.space_xxs; - let content = row::with_capacity(2) - .spacing(space_xxs) + let content = row::with_capacity(1) .push(button::standard(fl!("add-applet")).on_press(Message::AddAppletDrawer)) .apply(container) .width(Length::Fill) @@ -134,16 +132,24 @@ impl page::Page for Page { } fn context_drawer(&self) -> Option> { - Some(cosmic::app::context_drawer( - match self.context { - Some(ContextDrawerVariant::AddApplet) => { - self.add_applet_view(crate::pages::Message::PanelApplet) - } + Some(match self.context { + Some(ContextDrawerVariant::AddApplet) => { + let search_input = text_input::search_input(fl!("search-applets"), &self.search) + .on_input(Message::Search) + .on_paste(Message::Search) + .width(Length::Fixed(312.0)) + .apply(Element::from) + .map(crate::pages::Message::PanelApplet); - None => return None, - }, - crate::pages::Message::CloseContextDrawer, - )) + cosmic::app::context_drawer( + self.add_applet_view(crate::pages::Message::PanelApplet), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("add-applet")) + .header(search_input) + } + None => return None, + }) } fn on_enter(&mut self) -> Task { @@ -228,9 +234,8 @@ impl Page { let cosmic::cosmic_theme::Spacing { space_xxxs, space_xs, - space_l, .. - } = theme::active().cosmic().spacing; + } = theme::spacing(); let mut list_column = list_column(); let mut has_some = false; for info in self @@ -287,17 +292,7 @@ impl Page { ); } - let search = 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)); - - column::with_capacity(2) - .push(search) - .push(list_column) - .align_x(Alignment::Center) - .spacing(space_l) - .into() + list_column.into() } #[allow(clippy::too_many_lines)] @@ -421,10 +416,7 @@ impl Page { } Message::AddAppletDrawer => { self.context = Some(ContextDrawerVariant::AddApplet); - return cosmic::task::message(app::Message::OpenContextDrawer( - self.entity, - Cow::Owned(fl!("add-applet")), - )); + return cosmic::task::message(app::Message::OpenContextDrawer(self.entity)); } }; Task::none() @@ -443,7 +435,7 @@ pub fn lists< space_xxs, space_xs, .. - } = theme::active().cosmic().spacing; + } = theme::spacing(); let page = page.inner(); let Some(config) = page.current_config.as_ref() else { return Element::from(text::body(fl!("unknown"))); @@ -642,7 +634,7 @@ impl<'a, Message: 'static + Clone> AppletReorderList<'a, Message> { space_xxs, space_xs, .. - } = theme::active().cosmic().spacing; + } = theme::spacing(); let applet_buttons = info .clone() .into_iter() @@ -737,7 +729,7 @@ impl<'a, Message: 'static + Clone> AppletReorderList<'a, Message> { pos: Point, offered_applet: Applet<'a>, ) -> Vec> { - let space_xxs = theme::active().cosmic().spacing.space_xxs; + let space_xxs = theme::spacing().space_xxs; let mut reordered: Vec<_> = self.info.clone(); if !layout.bounds().contains(pos) { @@ -916,7 +908,7 @@ where shell: &mut Shell<'_, Message>, viewport: &Rectangle, ) -> event::Status { - let space_xxs = theme::active().cosmic().spacing.space_xxs; + let space_xxs = theme::spacing().space_xxs; let mut ret = match self.inner.as_widget_mut().on_event( &mut tree.children[0], event.clone(), diff --git a/cosmic-settings/src/pages/desktop/wallpaper/mod.rs b/cosmic-settings/src/pages/desktop/wallpaper/mod.rs index 38e5132..b348c75 100644 --- a/cosmic-settings/src/pages/desktop/wallpaper/mod.rs +++ b/cosmic-settings/src/pages/desktop/wallpaper/mod.rs @@ -290,6 +290,7 @@ impl page::Page for Page { }, crate::pages::Message::CloseContextDrawer, ) + .title(fl!("color-picker")) }) } } @@ -770,10 +771,7 @@ impl Page { Message::ColorAddContext => { self.context_view = Some(ContextView::AddColor); self.selection.active = Choice::Color(wallpaper::Color::Single([0., 0., 0.])); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("color-picker").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::ColorRemove(color) => { diff --git a/cosmic-settings/src/pages/display/mod.rs b/cosmic-settings/src/pages/display/mod.rs index a67e532..d740d38 100644 --- a/cosmic-settings/src/pages/display/mod.rs +++ b/cosmic-settings/src/pages/display/mod.rs @@ -7,7 +7,7 @@ pub mod arrangement; use crate::{app, pages}; use arrangement::Arrangement; use cosmic::iced::{Alignment, Length, time}; -use cosmic::iced_widget::scrollable::{Direction, RelativeOffset, Scrollbar}; +use cosmic::iced_widget::scrollable::RelativeOffset; use cosmic::widget::{ self, column, container, dropdown, list_column, segmented_button, tab_bar, text, toggler, }; @@ -1144,7 +1144,7 @@ pub fn display_arrangement() -> Section { let descriptions = §ion.descriptions; let cosmic::cosmic_theme::Spacing { space_xxs, space_m, .. - } = cosmic::theme::active().cosmic().spacing; + } = cosmic::theme::spacing(); column() .push( @@ -1159,10 +1159,9 @@ pub fn display_arrangement() -> Section { .on_placement(|id, x, y| { pages::Message::Displays(Message::Position(id, x, y)) }) - .apply(widget::scrollable) + .apply(widget::scrollable::horizontal) .id(page.display_arrangement_scrollable.clone()) .width(Length::Shrink) - .direction(Direction::Horizontal(Scrollbar::new())) .apply(container) .center_x(Length::Fill) }) @@ -1192,7 +1191,6 @@ pub fn display_configuration() -> Section { .descriptions(descriptions) .view::(move |_binder, page, section| { let descriptions = §ion.descriptions; - let theme = cosmic::theme::active(); let Some(&active_id) = page.display_tabs.active_data::() else { return column().into(); @@ -1296,7 +1294,7 @@ pub fn display_configuration() -> Section { items }); - let mut content = column().spacing(theme.cosmic().space_xs()); + let mut content = column().spacing(cosmic::theme::spacing().space_xs); if page.list.outputs.len() > 1 { let display_switcher = tab_bar::horizontal(&page.display_tabs) diff --git a/cosmic-settings/src/pages/input/keyboard/mod.rs b/cosmic-settings/src/pages/input/keyboard/mod.rs index 0d846c6..93e230d 100644 --- a/cosmic-settings/src/pages/input/keyboard/mod.rs +++ b/cosmic-settings/src/pages/input/keyboard/mod.rs @@ -7,7 +7,7 @@ use std::cmp; use cosmic::{ Apply, Element, Task, - app::ContextDrawer, + app::{ContextDrawer, context_drawer}, cosmic_config::{self, ConfigSet}, iced::{Alignment, Color, Length}, iced_core::Border, @@ -298,19 +298,33 @@ impl page::Page for Page { } fn context_drawer(&self) -> Option> { - self.context.as_ref().map(|context| { - cosmic::app::context_drawer( - match context { - Context::ShowInputSourcesContext => self.add_input_source_view(), - Context::SpecialCharacter(special_key) => self - .special_character_key_view(*special_key) - .map(crate::pages::Message::Keyboard), - Context::NumlockState => self - .numlock_state_view() - .map(crate::pages::Message::Keyboard), - }, + self.context.as_ref().map(|context| match context { + Context::ShowInputSourcesContext => { + let search = widget::search_input(fl!("type-to-search"), &self.input_source_search) + .on_input(Message::InputSourceSearch) + .on_clear(Message::InputSourceSearch(String::new())) + .apply(Element::from) + .map(crate::pages::Message::Keyboard); + + context_drawer( + self.add_input_source_view(), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("keyboard-sources", "add")) + .header(search) + } + Context::SpecialCharacter(special_key) => context_drawer( + self.special_character_key_view(*special_key) + .map(crate::pages::Message::Keyboard), crate::pages::Message::CloseContextDrawer, ) + .title(special_key.title()), + Context::NumlockState => context_drawer( + self.numlock_state_view() + .map(crate::pages::Message::Keyboard), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("keyboard-numlock-boot", "set")), }) } @@ -487,10 +501,7 @@ impl Page { Message::ShowInputSourcesContext => { self.context = Some(Context::ShowInputSourcesContext); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("keyboard-sources", "add").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::ExpandInputSourcePopover(value) => { @@ -499,18 +510,12 @@ impl Page { Message::OpenSpecialCharacterContext(key) => { self.context = Some(Context::SpecialCharacter(key)); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - key.title().into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::OpenNumlockContext => { self.context = Some(Context::NumlockState); - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("keyboard-numlock-boot", "set").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::SpecialCharacterSelect(id) => { @@ -553,11 +558,7 @@ impl Page { } pub fn add_input_source_view(&self) -> Element<'_, crate::pages::Message> { - let space_l = theme::active().cosmic().spacing.space_l; - - let search = widget::search_input(fl!("type-to-search"), &self.input_source_search) - .on_input(Message::InputSourceSearch) - .on_clear(Message::InputSourceSearch(String::new())); + let space_l = theme::spacing().space_l; let toggler = settings::item::builder(fl!("show-extended-input-sources")).toggler( self.show_extended_input_sources, @@ -577,9 +578,7 @@ impl Page { } widget::column() - .padding([2, 0]) .spacing(space_l) - .push(search) .push(toggler) .push(list) .apply(Element::from) @@ -715,7 +714,7 @@ fn input_sources() -> Section { .on_press(Message::ShowInputSourcesContext); widget::column::with_capacity(2) - .spacing(cosmic::theme::active().cosmic().space_xxs()) + .spacing(cosmic::theme::spacing().space_xxs) .push(section) .push( widget::container(add_input_source) @@ -800,7 +799,6 @@ fn keyboard_typing_assist() -> Section { .descriptions(descriptions) .view::(move |_binder, page, section| { let descriptions = §ion.descriptions; - let theme = cosmic::theme::active(); settings::section() .title(§ion.title) @@ -819,7 +817,7 @@ fn keyboard_typing_assist() -> Section { row::with_capacity(3) .align_y(Alignment::Center) - .spacing(theme.cosmic().space_s()) + .spacing(cosmic::theme::spacing().space_s) .push(widget::text::body(&descriptions[short])) .push(delay_slider) .push(widget::text::body(&descriptions[long])) @@ -839,7 +837,7 @@ fn keyboard_typing_assist() -> Section { row::with_capacity(3) .align_y(Alignment::Center) - .spacing(theme.cosmic().space_s()) + .spacing(cosmic::theme::spacing().space_s) .push(widget::text::body(&descriptions[slow])) .push(rate_slider) .push(widget::text::body(&descriptions[fast])) diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs index b1eff05..0bfb25c 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs @@ -459,7 +459,7 @@ impl Model { self.replace_dialog = None; let mut tasks = vec![cosmic::task::message( - crate::app::Message::OpenContextDrawer(self.entity, "".into()), + crate::app::Message::OpenContextDrawer(self.entity), )]; if let Some(model) = self.shortcut_models.get(0) { @@ -572,7 +572,7 @@ fn context_drawer<'a>( space_xs, space_l, .. - } = theme::active().cosmic().spacing; + } = theme::spacing(); let model = &shortcuts[id]; diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs index e66e6df..3b1c5c5 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs @@ -203,10 +203,7 @@ impl Page { Message::ShortcutContext => { self.add_shortcut.enable(); return Task::batch(vec![ - cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("custom-shortcuts", "context").into(), - )), + cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)), widget::text_input::focus(self.name_id.clone()), ]); } @@ -363,11 +360,14 @@ impl page::Page for Page { fn context_drawer(&self) -> Option> { if self.add_shortcut.active { - Some(cosmic::app::context_drawer( - self.add_keybinding_context() - .map(crate::pages::Message::CustomShortcuts), - crate::pages::Message::CloseContextDrawer, - )) + Some( + cosmic::app::context_drawer( + self.add_keybinding_context() + .map(crate::pages::Message::CustomShortcuts), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("custom-shortcuts", "context")), + ) } else { self.model.context_drawer(|msg| { crate::pages::Message::CustomShortcuts(Message::Shortcut(msg)) diff --git a/cosmic-settings/src/pages/time/date.rs b/cosmic-settings/src/pages/time/date.rs index d4e2df2..0babb73 100644 --- a/cosmic-settings/src/pages/time/date.rs +++ b/cosmic-settings/src/pages/time/date.rs @@ -168,11 +168,21 @@ impl page::Page for Page { fn context_drawer(&self) -> Option> { if self.timezone_context { - return Some(cosmic::app::context_drawer( - self.timezone_context_view() - .map(crate::pages::Message::from), - crate::pages::Message::CloseContextDrawer, - )); + let search = widget::search_input(fl!("type-to-search"), &self.timezone_search) + .on_input(Message::TimezoneSearch) + .on_clear(Message::TimezoneSearch(String::new())) + .apply(Element::from) + .map(crate::pages::Message::DateAndTime); + + return Some( + cosmic::app::context_drawer( + self.timezone_context_view() + .map(crate::pages::Message::from), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("time-zone")) + .header(search), + ); } None @@ -185,10 +195,7 @@ impl Page { Message::TimezoneContext => { self.timezone_search.clear(); self.timezone_context = true; - return cosmic::task::message(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("time-zone").into(), - )); + return cosmic::task::message(crate::app::Message::OpenContextDrawer(self.entity)); } Message::MilitaryTime(enable) => { @@ -317,12 +324,6 @@ impl Page { } fn timezone_context_view(&self) -> Element<'_, crate::pages::Message> { - let space_l = cosmic::theme::active().cosmic().spacing.space_l; - - let search = widget::search_input(fl!("type-to-search"), &self.timezone_search) - .on_input(Message::TimezoneSearch) - .on_clear(Message::TimezoneSearch(String::new())); - let mut list = widget::list_column(); let search_input = &self.timezone_search.trim().to_lowercase(); @@ -333,12 +334,7 @@ impl Page { } } - widget::column() - .padding([2, 0]) - .spacing(space_l) - .push(search) - .push(list) - .apply(Element::from) + list.apply(Element::from) .map(crate::pages::Message::DateAndTime) } diff --git a/cosmic-settings/src/pages/time/region.rs b/cosmic-settings/src/pages/time/region.rs index 24cd8aa..e731305 100644 --- a/cosmic-settings/src/pages/time/region.rs +++ b/cosmic-settings/src/pages/time/region.rs @@ -6,7 +6,7 @@ use std::rc::Rc; use std::str::FromStr; use std::sync::Arc; -use cosmic::app::ContextDrawer; +use cosmic::app::{ContextDrawer, context_drawer}; use cosmic::iced::{Alignment, Border, Color, Length}; use cosmic::iced_core::text::Wrapping; use cosmic::widget::{self, button, container}; @@ -154,14 +154,45 @@ impl page::Page for Page { } fn context_drawer(&self) -> Option> { - Some(cosmic::app::context_drawer( - match self.context.as_ref()? { - ContextView::AddLanguage => self.add_language_view(), - ContextView::Region => self.region_view(), + Some(match self.context.as_ref()? { + ContextView::AddLanguage => { + let search = widget::search_input(fl!("type-to-search"), &self.add_language_search) + .on_input(Message::AddLanguageSearch) + .on_clear(Message::AddLanguageSearch(String::new())) + .apply(Element::from) + .map(crate::pages::Message::from); + let install_additional_button = + widget::button::standard(fl!("install-additional-languages")) + .on_press(Message::InstallAdditionalLanguages) + .apply(widget::container) + .width(Length::Fill) + .align_x(Alignment::End) + .apply(Element::from) + .map(crate::pages::Message::from); + + context_drawer( + self.add_language_view().map(crate::pages::Message::from), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("add-language", "context")) + .header(search) + .footer(install_additional_button) } - .map(crate::pages::Message::from), - crate::pages::Message::CloseContextDrawer, - )) + ContextView::Region => { + let search = widget::search_input(fl!("type-to-search"), &self.add_language_search) + .on_input(Message::AddLanguageSearch) + .on_clear(Message::AddLanguageSearch(String::new())) + .apply(Element::from) + .map(crate::pages::Message::from); + + context_drawer( + self.region_view().map(crate::pages::Message::from), + crate::pages::Message::CloseContextDrawer, + ) + .title(fl!("region")) + .header(search) + } + }) } } @@ -208,10 +239,7 @@ impl Page { Message::AddLanguageContext => { self.context = Some(ContextView::AddLanguage); - return cosmic::Task::done(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("add-language", "context").into(), - )); + return cosmic::Task::done(crate::app::Message::OpenContextDrawer(self.entity)); } Message::AddLanguageSearch(search) => { @@ -253,10 +281,7 @@ impl Page { Message::RegionContext => { self.context = Some(ContextView::Region); - return cosmic::Task::done(crate::app::Message::OpenContextDrawer( - self.entity, - fl!("region").into(), - )); + return cosmic::Task::done(crate::app::Message::OpenContextDrawer(self.entity)); } Message::SourceContext(context_message) => { @@ -310,12 +335,6 @@ impl Page { } fn add_language_view(&self) -> cosmic::Element<'_, crate::pages::Message> { - let cosmic::cosmic_theme::Spacing { space_l, .. } = theme::active().cosmic().spacing; - - let search = widget::search_input(fl!("type-to-search"), &self.add_language_search) - .on_input(Message::AddLanguageSearch) - .on_clear(Message::AddLanguageSearch(String::new())); - let mut list = widget::list_column(); let search_input = &self.add_language_search.trim().to_lowercase(); @@ -370,21 +389,7 @@ impl Page { } } - let install_additional_button = - widget::button::standard(fl!("install-additional-languages")) - .on_press(Message::InstallAdditionalLanguages) - .apply(widget::container) - .width(Length::Fill) - .align_x(Alignment::End); - - widget::column() - .padding([2, 0]) - .spacing(space_l) - .push(search) - .push(list) - .push(install_additional_button) - .apply(Element::from) - .map(crate::pages::Message::Region) + list.apply(Element::from).map(crate::pages::Message::Region) } fn formatted_date(&self) -> String { @@ -519,17 +524,11 @@ impl Page { } fn region_view(&self) -> cosmic::Element<'_, crate::pages::Message> { - let space_l = theme::active().cosmic().spacing.space_l; - let svg_accent = Rc::new(|theme: &cosmic::Theme| { let color = theme.cosmic().accent_color().into(); cosmic::widget::svg::Style { color: Some(color) } }); - let search = widget::search_input(fl!("type-to-search"), &self.add_language_search) - .on_input(Message::AddLanguageSearch) - .on_clear(Message::AddLanguageSearch(String::new())); - let mut list = widget::list_column(); let search_input = &self.add_language_search.trim().to_lowercase(); @@ -576,13 +575,7 @@ impl Page { } } - widget::column() - .padding([2, 0]) - .spacing(space_l) - .push(search) - .push(list) - .apply(Element::from) - .map(crate::pages::Message::Region) + list.apply(Element::from).map(crate::pages::Message::Region) } } @@ -643,7 +636,7 @@ mod preferred_languages { .push(description) .push(content) .push(add_language_button) - .spacing(cosmic::theme::active().cosmic().spacing.space_xxs) + .spacing(cosmic::theme::spacing().space_xxs) .apply(cosmic::Element::from) .map(Into::into) })