shell: Don't be too pendantic about workspace groups
This commit is contained in:
parent
4f076f73d9
commit
33ee25c274
1 changed files with 5 additions and 71 deletions
|
|
@ -217,13 +217,13 @@ fn create_workspace(
|
||||||
impl WorkspaceSet {
|
impl WorkspaceSet {
|
||||||
fn new(
|
fn new(
|
||||||
state: &mut WorkspaceUpdateGuard<'_, State>,
|
state: &mut WorkspaceUpdateGuard<'_, State>,
|
||||||
group_handle: WorkspaceGroupHandle,
|
|
||||||
output: &Output,
|
output: &Output,
|
||||||
amount: WorkspaceAmount,
|
amount: WorkspaceAmount,
|
||||||
idx: usize,
|
idx: usize,
|
||||||
tiling_enabled: bool,
|
tiling_enabled: bool,
|
||||||
theme: cosmic::Theme,
|
theme: cosmic::Theme,
|
||||||
) -> WorkspaceSet {
|
) -> WorkspaceSet {
|
||||||
|
let group_handle = state.create_workspace_group();
|
||||||
let workspaces = match amount {
|
let workspaces = match amount {
|
||||||
WorkspaceAmount::Dynamic => {
|
WorkspaceAmount::Dynamic => {
|
||||||
let workspace = create_workspace(
|
let workspace = create_workspace(
|
||||||
|
|
@ -491,17 +491,8 @@ impl Workspaces {
|
||||||
set
|
set
|
||||||
})
|
})
|
||||||
.unwrap_or_else(|| {
|
.unwrap_or_else(|| {
|
||||||
let group_handle = match self.mode {
|
|
||||||
WorkspaceMode::Global => self
|
|
||||||
.sets
|
|
||||||
.first()
|
|
||||||
.map(|(_, w)| w.group.clone())
|
|
||||||
.unwrap_or(workspace_state.create_workspace_group()),
|
|
||||||
WorkspaceMode::OutputBound => workspace_state.create_workspace_group(),
|
|
||||||
};
|
|
||||||
WorkspaceSet::new(
|
WorkspaceSet::new(
|
||||||
workspace_state,
|
workspace_state,
|
||||||
group_handle,
|
|
||||||
&output,
|
&output,
|
||||||
self.amount,
|
self.amount,
|
||||||
self.sets.len(),
|
self.sets.len(),
|
||||||
|
|
@ -607,36 +598,7 @@ impl Workspaces {
|
||||||
|
|
||||||
match (self.mode, config.static_conf.workspace_mode) {
|
match (self.mode, config.static_conf.workspace_mode) {
|
||||||
(WorkspaceMode::Global, WorkspaceMode::OutputBound) => {
|
(WorkspaceMode::Global, WorkspaceMode::OutputBound) => {
|
||||||
// we need to create new separate workspace groups
|
// We basically just unlink the existing spaces, so nothing needs to be updated
|
||||||
let old_group = self.sets.first().map(|(_, w)| w.group.clone()).unwrap();
|
|
||||||
for (i, set) in self.sets.values_mut().enumerate() {
|
|
||||||
let new_group = workspace_state.create_workspace_group();
|
|
||||||
workspace_state.add_group_output(&new_group, &set.output);
|
|
||||||
|
|
||||||
for workspace in &mut set.workspaces {
|
|
||||||
// TODO: new protocol version allows workspaces to be reassigned,
|
|
||||||
// that would also avoid updating toplevel-info
|
|
||||||
let old_workspace_handle = workspace.handle;
|
|
||||||
workspace_state.remove_workspace(old_workspace_handle);
|
|
||||||
workspace.handle = workspace_state.create_workspace(&new_group).unwrap();
|
|
||||||
workspace_state.set_workspace_capabilities(
|
|
||||||
&workspace.handle,
|
|
||||||
[WorkspaceCapabilities::Activate].into_iter(),
|
|
||||||
);
|
|
||||||
|
|
||||||
for window in workspace.mapped() {
|
|
||||||
for (surface, _) in window.windows() {
|
|
||||||
toplevel_info_state
|
|
||||||
.toplevel_leave_workspace(&surface, &old_workspace_handle);
|
|
||||||
toplevel_info_state
|
|
||||||
.toplevel_enter_workspace(&surface, &workspace.handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set.update_idx(workspace_state, i);
|
|
||||||
workspace_state.remove_workspace_group(old_group);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
(WorkspaceMode::OutputBound, WorkspaceMode::Global) => {
|
(WorkspaceMode::OutputBound, WorkspaceMode::Global) => {
|
||||||
// lets construct an iterator of all the pairs of workspaces we have to "merge"
|
// lets construct an iterator of all the pairs of workspaces we have to "merge"
|
||||||
|
|
@ -660,12 +622,6 @@ impl Workspaces {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let group = workspace_state.create_workspace_group();
|
|
||||||
for output in self.sets.keys() {
|
|
||||||
workspace_state.add_group_output(&group, output);
|
|
||||||
}
|
|
||||||
|
|
||||||
let old_workspace_groups = self.sets.values().map(|w| w.group).collect::<Vec<_>>();
|
|
||||||
for (j, pair) in pairs.iter().enumerate() {
|
for (j, pair) in pairs.iter().enumerate() {
|
||||||
for (i, x) in pair.iter().enumerate() {
|
for (i, x) in pair.iter().enumerate() {
|
||||||
// Fill up sets, where necessary
|
// Fill up sets, where necessary
|
||||||
|
|
@ -677,42 +633,20 @@ impl Workspaces {
|
||||||
create_workspace(
|
create_workspace(
|
||||||
workspace_state,
|
workspace_state,
|
||||||
output,
|
output,
|
||||||
&group,
|
&set.group,
|
||||||
false,
|
false,
|
||||||
config.static_conf.tiling_enabled,
|
config.static_conf.tiling_enabled,
|
||||||
self.theme.clone(),
|
self.theme.clone(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
// Otherwise just update
|
|
||||||
} else {
|
|
||||||
let set = &mut self.sets[i];
|
|
||||||
let workspace = &mut set.workspaces[j];
|
|
||||||
let old_workspace_handle = workspace.handle;
|
|
||||||
workspace_state.remove_workspace(old_workspace_handle);
|
|
||||||
workspace.handle = workspace_state.create_workspace(&group).unwrap();
|
|
||||||
workspace_state.set_workspace_capabilities(
|
|
||||||
&workspace.handle,
|
|
||||||
[WorkspaceCapabilities::Activate].into_iter(),
|
|
||||||
);
|
|
||||||
|
|
||||||
for window in workspace.mapped() {
|
|
||||||
for (surface, _) in window.windows() {
|
|
||||||
toplevel_info_state
|
|
||||||
.toplevel_leave_workspace(&surface, &old_workspace_handle);
|
|
||||||
toplevel_info_state
|
|
||||||
.toplevel_enter_workspace(&surface, &workspace.handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Otherwise we are fine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// fixup indices
|
||||||
for (i, set) in self.sets.values_mut().enumerate() {
|
for (i, set) in self.sets.values_mut().enumerate() {
|
||||||
set.group = group.clone();
|
|
||||||
set.update_idx(workspace_state, i);
|
set.update_idx(workspace_state, i);
|
||||||
}
|
}
|
||||||
for old_group in old_workspace_groups {
|
|
||||||
workspace_state.remove_workspace_group(old_group);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue