diff --git a/cosmic-settings/src/pages/desktop/workspaces.rs b/cosmic-settings/src/pages/desktop/workspaces.rs index b179693..6f5e1f2 100644 --- a/cosmic-settings/src/pages/desktop/workspaces.rs +++ b/cosmic-settings/src/pages/desktop/workspaces.rs @@ -20,6 +20,7 @@ pub enum Message { SetActionOnTyping(usize), SetWorkspaceMode(WorkspaceMode), SetWorkspaceLayout(WorkspaceLayout), + SetWorkspaceWraparound(bool), SetShowName(bool), SetShowNumber(bool), Surface(surface::Action), @@ -87,6 +88,7 @@ impl page::Page for Page { sections.insert(action_on_typing()), sections.insert(multi_behavior()), sections.insert(workspace_orientation()), + sections.insert(workspace_navigation()), ]) } @@ -125,6 +127,10 @@ impl Page { into_active_selection(&self.comp_workspace_config.action_on_typing); self.save_comp_config(); } + Message::SetWorkspaceWraparound(value) => { + self.comp_workspace_config.workspace_wraparound = value; + self.save_comp_config(); + } Message::SetShowName(value) => { self.show_workspace_name = value; if let Err(err) = self.config.set("show_workspace_name", value) { @@ -250,3 +256,24 @@ fn workspace_orientation() -> Section { .map(crate::pages::Message::DesktopWorkspaces) }) } + +fn workspace_navigation() -> Section { + crate::slab!(descriptions { + description = fl!("workspaces-navigation", "wraparound"); + }); + + Section::default() + .title(fl!("workspaces-navigation")) + .descriptions(descriptions) + .view::(move |_binder, page, section| { + let descriptions = §ion.descriptions; + settings::section() + .title(§ion.title) + .add(settings::item::builder(&descriptions[description]).toggler( + page.comp_workspace_config.workspace_wraparound, + Message::SetWorkspaceWraparound, + )) + .apply(Element::from) + .map(crate::pages::Message::DesktopWorkspaces) + }) +} diff --git a/i18n/en/cosmic_settings.ftl b/i18n/en/cosmic_settings.ftl index 735d892..535477b 100644 --- a/i18n/en/cosmic_settings.ftl +++ b/i18n/en/cosmic_settings.ftl @@ -521,6 +521,9 @@ workspaces-orientation = Workspaces orientation hot-corner = Hot Corner .top-left-corner = Enable top-left hot corner for Workspaces +workspaces-navigation = Navigation + .wraparound = Move between first and last workspace using keyboard shortcuts and gestures + ## Displays -requires-restart = Requires restart