diff --git a/cosmic-comp-config/src/workspace.rs b/cosmic-comp-config/src/workspace.rs index 08c3dc6c..62676264 100644 --- a/cosmic-comp-config/src/workspace.rs +++ b/cosmic-comp-config/src/workspace.rs @@ -63,5 +63,5 @@ pub struct PinnedWorkspace { pub output: OutputMatch, pub tiling_enabled: bool, pub id: Option, - // TODO: name + pub name: Option, } diff --git a/src/shell/mod.rs b/src/shell/mod.rs index 76c4dd79..89309e88 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -439,6 +439,11 @@ fn create_workspace_from_pinned( | WorkspaceCapabilities::Pin | WorkspaceCapabilities::Move, ); + + if let Some(ref name) = pinned.name { + state.set_workspace_name(&workspace_handle, name); + } + Workspace::from_pinned( pinned, workspace_handle, @@ -619,6 +624,7 @@ impl WorkspaceSet { state, self.workspaces.len() as u8 + 1, &workspace.handle, + workspace.name.as_deref(), // this method is only used by code paths related to dynamic workspaces, so this should be fine ); self.workspaces.push(workspace); @@ -680,7 +686,12 @@ impl WorkspaceSet { fn update_workspace_idxs(&self, state: &mut WorkspaceUpdateGuard<'_, State>) { for (i, workspace) in self.workspaces.iter().enumerate() { - workspace_set_idx(state, i as u8 + 1, &workspace.handle); + workspace_set_idx( + state, + i as u8 + 1, + &workspace.handle, + workspace.name.as_deref(), + ); } } @@ -5025,8 +5036,9 @@ fn workspace_set_idx( state: &mut WorkspaceUpdateGuard<'_, State>, idx: u8, handle: &WorkspaceHandle, + name: Option<&str>, ) { - state.set_workspace_name(handle, format!("{}", idx)); + state.set_workspace_name(handle, name.unwrap_or(&format!("{}", idx))); state.set_workspace_coordinates(handle, &[idx as u32]); } diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index 37cda1b5..2b4db98c 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -111,6 +111,7 @@ pub struct Workspace { pub fullscreen_surfaces: Vec, pub pinned: bool, pub id: Option, + pub name: Option, pub handle: WorkspaceHandle, pub focus_stack: FocusStacks, @@ -386,6 +387,7 @@ impl Workspace { fullscreen_surfaces: Vec::new(), pinned: false, id: None, + name: None, handle, focus_stack: FocusStacks::default(), image_copy: ImageCopySessions::default(), @@ -419,6 +421,7 @@ impl Workspace { fullscreen_surfaces: Vec::new(), pinned: true, id: pinned.id.clone(), + name: pinned.name.clone(), handle, focus_stack: FocusStacks::default(), image_copy: ImageCopySessions::default(), @@ -446,6 +449,7 @@ impl Workspace { }, tiling_enabled: self.tiling_enabled, id: self.id.clone(), + name: self.name.clone(), }) } else { None