Send one-dimensional workspace coordinates, without output index

`ext_workspace_handle_v1::coordinates` defines the coordinate as
"an N-dimensional grid within a workspace group". So it is not
expected that the coordinates are unique between different groups, or
establish any geometry between different groups.

Whether we use one workspace per output or allow workspaces to span
outputs in the protocol, the whole workspace group is on the same set of
outputs. So I think this holds in any case.

I don't think we rely on this anywhere.
This commit is contained in:
Ian Douglas Scott 2025-03-14 10:40:33 -07:00 committed by Ian Douglas Scott
parent 8d6bd47bc4
commit cee8ffd463

View file

@ -331,7 +331,6 @@ pub struct WorkspaceSet {
previously_active: Option<(usize, WorkspaceDelta)>, previously_active: Option<(usize, WorkspaceDelta)>,
pub active: usize, pub active: usize,
pub group: WorkspaceGroupHandle, pub group: WorkspaceGroupHandle,
idx: usize,
tiling_enabled: bool, tiling_enabled: bool,
output: Output, output: Output,
theme: cosmic::Theme, theme: cosmic::Theme,
@ -437,7 +436,6 @@ impl WorkspaceSet {
fn new( fn new(
state: &mut WorkspaceUpdateGuard<'_, State>, state: &mut WorkspaceUpdateGuard<'_, State>,
output: &Output, output: &Output,
idx: usize,
tiling_enabled: bool, tiling_enabled: bool,
theme: cosmic::Theme, theme: cosmic::Theme,
) -> WorkspaceSet { ) -> WorkspaceSet {
@ -448,7 +446,6 @@ impl WorkspaceSet {
previously_active: None, previously_active: None,
active: 0, active: 0,
group: group_handle, group: group_handle,
idx,
tiling_enabled, tiling_enabled,
theme, theme,
sticky_layer, sticky_layer,
@ -569,7 +566,6 @@ impl WorkspaceSet {
workspace_set_idx( workspace_set_idx(
state, state,
self.workspaces.len() as u8 + 1, self.workspaces.len() as u8 + 1,
self.idx,
&workspace.handle, &workspace.handle,
// this method is only used by code paths related to dynamic workspaces, so this should be fine // this method is only used by code paths related to dynamic workspaces, so this should be fine
); );
@ -620,17 +616,10 @@ impl WorkspaceSet {
if kept.iter().any(|val| *val == false) { if kept.iter().any(|val| *val == false) {
for (i, workspace) in self.workspaces.iter().enumerate() { for (i, workspace) in self.workspaces.iter().enumerate() {
workspace_set_idx(state, i as u8 + 1, self.idx, &workspace.handle); workspace_set_idx(state, i as u8 + 1, &workspace.handle);
} }
} }
} }
fn update_idx(&mut self, state: &mut WorkspaceUpdateGuard<'_, State>, idx: usize) {
self.idx = idx;
for (i, workspace) in self.workspaces.iter().enumerate() {
workspace_set_idx(state, i as u8 + 1, idx, &workspace.handle);
}
}
} }
#[derive(Debug)] #[derive(Debug)]
@ -674,13 +663,7 @@ impl Workspaces {
set set
}) })
.unwrap_or_else(|| { .unwrap_or_else(|| {
WorkspaceSet::new( WorkspaceSet::new(workspace_state, &output, self.autotile, self.theme.clone())
workspace_state,
&output,
self.sets.len(),
self.autotile,
self.theme.clone(),
)
}); });
workspace_state.add_group_output(&set.group, &output); workspace_state.add_group_output(&set.group, &output);
@ -698,12 +681,7 @@ impl Workspaces {
other_set.add_empty_workspace(workspace_state); other_set.add_empty_workspace(workspace_state);
} }
for (i, workspace) in other_set.workspaces.iter_mut().enumerate() { for (i, workspace) in other_set.workspaces.iter_mut().enumerate() {
workspace_set_idx( workspace_set_idx(workspace_state, i as u8 + 1, &workspace.handle);
workspace_state,
i as u8 + 1,
other_set.idx,
&workspace.handle,
);
} }
other_set.active = other_set other_set.active = other_set
.workspaces .workspaces
@ -728,7 +706,7 @@ impl Workspaces {
for (i, workspace) in set.workspaces.iter_mut().enumerate() { for (i, workspace) in set.workspaces.iter_mut().enumerate() {
workspace.set_output(output); workspace.set_output(output);
workspace.refresh(); workspace.refresh();
workspace_set_idx(workspace_state, i as u8 + 1, set.idx, &workspace.handle); workspace_set_idx(workspace_state, i as u8 + 1, &workspace.handle);
if i == set.active { if i == set.active {
workspace_state.add_workspace_state(&workspace.handle, WState::Active); workspace_state.add_workspace_state(&workspace.handle, WState::Active);
} }
@ -820,10 +798,6 @@ impl Workspaces {
} else { } else {
workspace_state.remove_group_output(&workspace_group, output); workspace_state.remove_group_output(&workspace_group, output);
} }
for (i, set) in self.sets.values_mut().enumerate() {
set.update_idx(workspace_state, i);
}
} else { } else {
workspace_state.remove_group_output(&set.group, output); workspace_state.remove_group_output(&set.group, output);
self.backup_set = Some(set); self.backup_set = Some(set);
@ -917,10 +891,6 @@ impl Workspaces {
// Otherwise we are fine // Otherwise we are fine
} }
} }
// fixup indices
for (i, set) in self.sets.values_mut().enumerate() {
set.update_idx(workspace_state, i);
}
} }
_ => {} _ => {}
}; };
@ -998,12 +968,7 @@ impl Workspaces {
if keep.iter().any(|val| *val == false) { if keep.iter().any(|val| *val == false) {
for set in self.sets.values_mut() { for set in self.sets.values_mut() {
for (i, workspace) in set.workspaces.iter().enumerate() { for (i, workspace) in set.workspaces.iter().enumerate() {
workspace_set_idx( workspace_set_idx(workspace_state, i as u8 + 1, &workspace.handle);
workspace_state,
i as u8 + 1,
set.idx,
&workspace.handle,
);
} }
} }
} }
@ -4019,11 +3984,10 @@ impl Shell {
fn workspace_set_idx( fn workspace_set_idx(
state: &mut WorkspaceUpdateGuard<'_, State>, state: &mut WorkspaceUpdateGuard<'_, State>,
idx: u8, idx: u8,
output_pos: usize,
handle: &WorkspaceHandle, handle: &WorkspaceHandle,
) { ) {
state.set_workspace_name(handle, format!("{}", idx)); state.set_workspace_name(handle, format!("{}", idx));
state.set_workspace_coordinates(handle, &[idx as u32, output_pos as u32]); state.set_workspace_coordinates(handle, &[idx as u32]);
} }
pub fn check_grab_preconditions( pub fn check_grab_preconditions(