Make "New Workspace" button add workspace

This commit is contained in:
Ian Douglas Scott 2023-12-12 15:36:20 -08:00
parent 80e4fb0227
commit ea9298c021
2 changed files with 19 additions and 5 deletions

View file

@ -36,7 +36,8 @@ use cosmic::{
}, },
iced_sctk::commands::layer_surface::{destroy_layer_surface, get_layer_surface}, 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 once_cell::sync::Lazy;
use std::{ use std::{
collections::{HashMap, HashSet}, collections::{HashMap, HashSet},
@ -115,6 +116,7 @@ enum Msg {
DndWorkspaceDrop, DndWorkspaceDrop,
DndWorkspaceData(String, Vec<u8>), DndWorkspaceData(String, Vec<u8>),
SourceFinished, SourceFinished,
NewWorkspace,
} }
#[derive(Debug)] #[derive(Debug)]
@ -161,7 +163,7 @@ enum DragSurface {
} }
struct Conf { struct Conf {
_cosmic_comp_config: cosmic_config::Config, cosmic_comp_config: cosmic_config::Config,
workspace_config: cosmic_comp_config::workspace::WorkspaceConfig, workspace_config: cosmic_comp_config::workspace::WorkspaceConfig,
} }
@ -173,7 +175,7 @@ impl Default for Conf {
cosmic_comp_config::workspace::WorkspaceConfig::default() cosmic_comp_config::workspace::WorkspaceConfig::default()
}); });
Self { Self {
_cosmic_comp_config: cosmic_comp_config, cosmic_comp_config,
workspace_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() Command::none()

View file

@ -120,8 +120,11 @@ fn workspaces_sidebar<'a>(
.map(|w| workspace_sidebar_entry(w, output)) .map(|w| workspace_sidebar_entry(w, output))
.collect(); .collect();
if amount != WorkspaceAmount::Dynamic { if amount != WorkspaceAmount::Dynamic {
// TODO implement sidebar_entries.push(
sidebar_entries.push(widget::button(widget::text("New Workspace")).into()); widget::button(widget::text("New Workspace"))
.on_press(Msg::NewWorkspace)
.into(),
);
} }
let sidebar_entries_container: cosmic::Element<'_, _> = match layout { let sidebar_entries_container: cosmic::Element<'_, _> = match layout {
WorkspaceLayout::Vertical => column(sidebar_entries).into(), WorkspaceLayout::Vertical => column(sidebar_entries).into(),