shell: Fix workspace naming
This commit is contained in:
parent
5057dec552
commit
78b9b07cec
1 changed files with 59 additions and 11 deletions
|
|
@ -84,7 +84,10 @@ fn create_workspace(
|
||||||
if active {
|
if active {
|
||||||
state.add_workspace_state(&workspace_handle, WState::Active);
|
state.add_workspace_state(&workspace_handle, WState::Active);
|
||||||
}
|
}
|
||||||
init_workspace_handle(state, 0, &workspace_handle);
|
state.set_workspace_capabilities(
|
||||||
|
&workspace_handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
Workspace::new(workspace_handle)
|
Workspace::new(workspace_handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -94,10 +97,24 @@ impl WorkspaceSet {
|
||||||
|
|
||||||
let workspaces = match amount {
|
let workspaces = match amount {
|
||||||
WorkspaceAmount::Dynamic => {
|
WorkspaceAmount::Dynamic => {
|
||||||
vec![create_workspace(state, &group_handle, true)]
|
let workspace = create_workspace(state, &group_handle, true);
|
||||||
|
workspace_set_idx(state, 1, &workspace.handle);
|
||||||
|
state.set_workspace_capabilities(
|
||||||
|
&workspace.handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
|
vec![workspace]
|
||||||
}
|
}
|
||||||
WorkspaceAmount::Static(len) => (0..len)
|
WorkspaceAmount::Static(len) => (0..len)
|
||||||
.map(|i| create_workspace(state, &group_handle, i == 0))
|
.map(|i| {
|
||||||
|
let workspace = create_workspace(state, &group_handle, i == 0);
|
||||||
|
workspace_set_idx(state, i + 1, &workspace.handle);
|
||||||
|
state.set_workspace_capabilities(
|
||||||
|
&workspace.handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
|
workspace
|
||||||
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -138,9 +155,15 @@ impl WorkspaceSet {
|
||||||
state: &mut WorkspaceState<State>,
|
state: &mut WorkspaceState<State>,
|
||||||
outputs: impl Iterator<Item = (&'a Output, Point<i32, Logical>)>,
|
outputs: impl Iterator<Item = (&'a Output, Point<i32, Logical>)>,
|
||||||
) {
|
) {
|
||||||
|
let mut state = state.update();
|
||||||
|
|
||||||
// add empty at the end, if necessary
|
// add empty at the end, if necessary
|
||||||
if self.workspaces.last().unwrap().windows().next().is_some() {
|
if self.workspaces.last().unwrap().windows().next().is_some() {
|
||||||
let mut workspace = create_workspace(&mut state.update(), &self.group, false);
|
let mut workspace = create_workspace(&mut state, &self.group, false);
|
||||||
|
state.set_workspace_capabilities(
|
||||||
|
&workspace.handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
for (output, location) in outputs {
|
for (output, location) in outputs {
|
||||||
workspace.map_output(output, location);
|
workspace.map_output(output, location);
|
||||||
}
|
}
|
||||||
|
|
@ -149,13 +172,12 @@ impl WorkspaceSet {
|
||||||
|
|
||||||
let len = self.workspaces.len();
|
let len = self.workspaces.len();
|
||||||
let mut keep = vec![true; len];
|
let mut keep = vec![true; len];
|
||||||
|
|
||||||
// remove empty workspaces in between, if they are not active
|
// remove empty workspaces in between, if they are not active
|
||||||
for (i, workspace) in self.workspaces.iter().enumerate() {
|
for (i, workspace) in self.workspaces.iter().enumerate() {
|
||||||
let has_windows = workspace.windows().next().is_some();
|
let has_windows = workspace.windows().next().is_some();
|
||||||
|
|
||||||
if !has_windows && i != self.active && i != len - 1 {
|
if !has_windows && i != self.active && i != len - 1 {
|
||||||
state.update().remove_workspace(workspace.handle);
|
state.remove_workspace(workspace.handle);
|
||||||
keep[i] = false;
|
keep[i] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -167,6 +189,12 @@ impl WorkspaceSet {
|
||||||
.take(self.active + 1)
|
.take(self.active + 1)
|
||||||
.filter(|keep| !**keep)
|
.filter(|keep| !**keep)
|
||||||
.count();
|
.count();
|
||||||
|
|
||||||
|
if keep.iter().any(|val| *val == false) {
|
||||||
|
for (i, workspace) in self.workspaces.iter().enumerate() {
|
||||||
|
workspace_set_idx(&mut state, i as u8 + 1, &workspace.handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ensure_static<'a>(
|
fn ensure_static<'a>(
|
||||||
|
|
@ -209,6 +237,15 @@ impl WorkspaceSet {
|
||||||
let outputs = outputs.collect::<Vec<_>>();
|
let outputs = outputs.collect::<Vec<_>>();
|
||||||
while amount > self.workspaces.len() {
|
while amount > self.workspaces.len() {
|
||||||
let mut workspace = create_workspace(&mut state, &self.group, false);
|
let mut workspace = create_workspace(&mut state, &self.group, false);
|
||||||
|
workspace_set_idx(
|
||||||
|
&mut state,
|
||||||
|
self.workspaces.len() as u8 + 1,
|
||||||
|
&workspace.handle,
|
||||||
|
);
|
||||||
|
state.set_workspace_capabilities(
|
||||||
|
&workspace.handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
for &(output, location) in outputs.iter() {
|
for &(output, location) in outputs.iter() {
|
||||||
workspace.map_output(output, location);
|
workspace.map_output(output, location);
|
||||||
}
|
}
|
||||||
|
|
@ -418,7 +455,11 @@ impl Shell {
|
||||||
state.remove_workspace(workspace.handle);
|
state.remove_workspace(workspace.handle);
|
||||||
let workspace_handle =
|
let workspace_handle =
|
||||||
state.create_workspace(&workspace_group).unwrap();
|
state.create_workspace(&workspace_group).unwrap();
|
||||||
init_workspace_handle(
|
state.set_workspace_capabilities(
|
||||||
|
&workspace_handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
|
workspace_set_idx(
|
||||||
&mut state,
|
&mut state,
|
||||||
new_set.workspaces.len() as u8,
|
new_set.workspaces.len() as u8,
|
||||||
&workspace_handle,
|
&workspace_handle,
|
||||||
|
|
@ -524,7 +565,11 @@ impl Shell {
|
||||||
for (i, (workspaces, active)) in mergers.into_iter().enumerate() {
|
for (i, (workspaces, active)) in mergers.into_iter().enumerate() {
|
||||||
// and then we can merge each vector into one and put that into our new set.
|
// and then we can merge each vector into one and put that into our new set.
|
||||||
let workspace_handle = state.create_workspace(&new_set.group).unwrap();
|
let workspace_handle = state.create_workspace(&new_set.group).unwrap();
|
||||||
init_workspace_handle(&mut state, i as u8, &workspace_handle);
|
state.set_workspace_capabilities(
|
||||||
|
&workspace_handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
|
workspace_set_idx(&mut state, i as u8, &workspace_handle);
|
||||||
|
|
||||||
let mut new_workspace = Workspace::new(workspace_handle);
|
let mut new_workspace = Workspace::new(workspace_handle);
|
||||||
for output in self.outputs.iter() {
|
for output in self.outputs.iter() {
|
||||||
|
|
@ -580,7 +625,11 @@ impl Shell {
|
||||||
// copy over everything and then remove other outputs to preserve state
|
// copy over everything and then remove other outputs to preserve state
|
||||||
let new_set = sets.get_mut(output).unwrap();
|
let new_set = sets.get_mut(output).unwrap();
|
||||||
let new_workspace_handle = state.create_workspace(&new_set.group).unwrap();
|
let new_workspace_handle = state.create_workspace(&new_set.group).unwrap();
|
||||||
init_workspace_handle(&mut state, i as u8, &new_workspace_handle);
|
state.set_workspace_capabilities(
|
||||||
|
&new_workspace_handle,
|
||||||
|
[WorkspaceCapabilities::Activate].into_iter(),
|
||||||
|
);
|
||||||
|
workspace_set_idx(&mut state, i as u8, &new_workspace_handle);
|
||||||
|
|
||||||
let mut old_tiling_layer = workspace.tiling_layer.clone();
|
let mut old_tiling_layer = workspace.tiling_layer.clone();
|
||||||
let mut new_floating_layer = FloatingLayout::new();
|
let mut new_floating_layer = FloatingLayout::new();
|
||||||
|
|
@ -994,12 +1043,11 @@ impl Shell {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_workspace_handle<'a>(
|
fn workspace_set_idx<'a>(
|
||||||
state: &mut WorkspaceUpdateGuard<'a, State>,
|
state: &mut WorkspaceUpdateGuard<'a, State>,
|
||||||
idx: u8,
|
idx: u8,
|
||||||
handle: &WorkspaceHandle,
|
handle: &WorkspaceHandle,
|
||||||
) {
|
) {
|
||||||
state.set_workspace_capabilities(&handle, [WorkspaceCapabilities::Activate].into_iter());
|
|
||||||
state.set_workspace_name(&handle, format!("{}", idx + 1));
|
state.set_workspace_name(&handle, format!("{}", idx + 1));
|
||||||
state.set_workspace_coordinates(&handle, [Some(idx as u32), None, None]);
|
state.set_workspace_coordinates(&handle, [Some(idx as u32), None, None]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue