diff --git a/src/main.rs b/src/main.rs index a0a4c51..6c2d34a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,7 +36,8 @@ use cosmic::{ }, iced_sctk::commands::layer_surface::{destroy_layer_surface, get_layer_surface}, }; -use cosmic_config::ConfigGet; +use cosmic_comp_config::workspace::WorkspaceAmount; +use cosmic_config::{ConfigGet, ConfigSet}; use once_cell::sync::Lazy; use std::{ collections::{HashMap, HashSet}, @@ -115,6 +116,7 @@ enum Msg { DndWorkspaceDrop, DndWorkspaceData(String, Vec), SourceFinished, + NewWorkspace, } #[derive(Debug)] @@ -161,7 +163,7 @@ enum DragSurface { } struct Conf { - _cosmic_comp_config: cosmic_config::Config, + cosmic_comp_config: cosmic_config::Config, workspace_config: cosmic_comp_config::workspace::WorkspaceConfig, } @@ -173,7 +175,7 @@ impl Default for Conf { cosmic_comp_config::workspace::WorkspaceConfig::default() }); Self { - _cosmic_comp_config: cosmic_comp_config, + cosmic_comp_config, workspace_config, } } @@ -565,6 +567,15 @@ impl Application for App { } } } + Msg::NewWorkspace => { + if let WorkspaceAmount::Static(n) = &mut self.conf.workspace_config.workspace_amount + { + *n += 1; + self.conf + .cosmic_comp_config + .set("workspaces", &self.conf.workspace_config); + } + } } Command::none() diff --git a/src/view/mod.rs b/src/view/mod.rs index 2e18458..be6eccb 100644 --- a/src/view/mod.rs +++ b/src/view/mod.rs @@ -120,8 +120,11 @@ fn workspaces_sidebar<'a>( .map(|w| workspace_sidebar_entry(w, output)) .collect(); if amount != WorkspaceAmount::Dynamic { - // TODO implement - sidebar_entries.push(widget::button(widget::text("New Workspace")).into()); + sidebar_entries.push( + widget::button(widget::text("New Workspace")) + .on_press(Msg::NewWorkspace) + .into(), + ); } let sidebar_entries_container: cosmic::Element<'_, _> = match layout { WorkspaceLayout::Vertical => column(sidebar_entries).into(),