aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/layout/mod.rs66
-rw-r--r--src/layout/monitor.rs22
2 files changed, 60 insertions, 28 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index 0eb451e6..544b2186 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -531,7 +531,11 @@ impl<W: LayoutElement> Layout<W> {
MonitorSet::NoOutputs { workspaces } => {
let ws = workspaces
.iter_mut()
- .find(|ws| ws.name.as_deref() == Some(workspace_name))
+ .find(|ws| {
+ ws.name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ })
.unwrap();
ws.add_window(window, true, width, is_full_width);
None
@@ -799,22 +803,23 @@ impl<W: LayoutElement> Layout<W> {
match &self.monitor_set {
MonitorSet::Normal { ref monitors, .. } => {
for mon in monitors {
- if let Some((index, workspace)) = mon
- .workspaces
- .iter()
- .enumerate()
- .find(|(_, w)| w.name.as_deref() == Some(workspace_name))
+ if let Some((index, workspace)) =
+ mon.workspaces.iter().enumerate().find(|(_, w)| {
+ w.name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ })
{
return Some((index, workspace));
}
}
}
MonitorSet::NoOutputs { workspaces } => {
- if let Some((index, workspace)) = workspaces
- .iter()
- .enumerate()
- .find(|(_, w)| w.name.as_deref() == Some(workspace_name))
- {
+ if let Some((index, workspace)) = workspaces.iter().enumerate().find(|(_, w)| {
+ w.name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ }) {
return Some((index, workspace));
}
}
@@ -837,7 +842,11 @@ impl<W: LayoutElement> Layout<W> {
}
MonitorSet::NoOutputs { workspaces } => {
for (idx, ws) in workspaces.iter_mut().enumerate() {
- if ws.name.as_deref() == Some(workspace_name) {
+ if ws
+ .name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ {
ws.unname();
// Clean up empty workspaces.
@@ -1110,10 +1119,11 @@ impl<W: LayoutElement> Layout<W> {
};
monitors.iter().find(|monitor| {
- monitor
- .workspaces
- .iter()
- .any(|ws| ws.name.as_deref() == Some(workspace_name))
+ monitor.workspaces.iter().any(|ws| {
+ ws.name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ })
})
}
@@ -1416,7 +1426,7 @@ impl<W: LayoutElement> Layout<W> {
use crate::layout::monitor::WorkspaceSwitch;
let mut seen_workspace_id = HashSet::new();
- let mut seen_workspace_name = HashSet::new();
+ let mut seen_workspace_name = Vec::<String>::new();
let (monitors, &primary_idx, &active_monitor_idx) = match &self.monitor_set {
MonitorSet::Normal {
@@ -1443,9 +1453,12 @@ impl<W: LayoutElement> Layout<W> {
if let Some(name) = &workspace.name {
assert!(
- seen_workspace_name.insert(name),
+ !seen_workspace_name
+ .iter()
+ .any(|n| n.eq_ignore_ascii_case(name)),
"workspace name must be unique"
);
+ seen_workspace_name.push(name.clone());
}
workspace.verify_invariants();
@@ -1544,9 +1557,12 @@ impl<W: LayoutElement> Layout<W> {
if let Some(name) = &workspace.name {
assert!(
- seen_workspace_name.insert(name),
+ !seen_workspace_name
+ .iter()
+ .any(|n| n.eq_ignore_ascii_case(name)),
"workspace name must be unique"
);
+ seen_workspace_name.push(name.clone());
}
workspace.verify_invariants();
@@ -2788,7 +2804,11 @@ mod tests {
}
}
- if ws.name.as_deref() == Some(&ws_name) {
+ if ws
+ .name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(&ws_name))
+ {
found_workspace = true;
}
}
@@ -2802,7 +2822,11 @@ mod tests {
}
}
- if ws.name.as_deref() == Some(&ws_name) {
+ if ws
+ .name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(&ws_name))
+ {
found_workspace = true;
}
}
diff --git a/src/layout/monitor.rs b/src/layout/monitor.rs
index 9dcc552e..c56146a4 100644
--- a/src/layout/monitor.rs
+++ b/src/layout/monitor.rs
@@ -104,15 +104,19 @@ impl<W: LayoutElement> Monitor<W> {
}
pub fn find_named_workspace(&self, workspace_name: &str) -> Option<&Workspace<W>> {
- self.workspaces
- .iter()
- .find(|w| w.name.as_deref() == Some(workspace_name))
+ self.workspaces.iter().find(|ws| {
+ ws.name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ })
}
pub fn find_named_workspace_index(&self, workspace_name: &str) -> Option<usize> {
- self.workspaces
- .iter()
- .position(|w| w.name.as_deref() == Some(workspace_name))
+ self.workspaces.iter().position(|ws| {
+ ws.name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ })
}
pub fn active_workspace(&mut self) -> &mut Workspace<W> {
@@ -227,7 +231,11 @@ impl<W: LayoutElement> Monitor<W> {
pub fn unname_workspace(&mut self, workspace_name: &str) -> bool {
for ws in &mut self.workspaces {
- if ws.name.as_deref() == Some(workspace_name) {
+ if ws
+ .name
+ .as_ref()
+ .map_or(false, |name| name.eq_ignore_ascii_case(workspace_name))
+ {
ws.unname();
return true;
}