Skip to content

Commit

Permalink
Fixed hyprland active workspace selection with named workspaces
Browse files Browse the repository at this point in the history
  • Loading branch information
f-str committed Oct 5, 2024
1 parent db00ddf commit db53e9e
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions src/wm_info_provider/hyprland.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,19 +114,25 @@ fn hyprland_cb(conn: &mut Connection<State>, state: &mut State) -> io::Result<()
match hyprland.ipc.next_event() {
Ok(event) => {
if let Some(active_ws) = event.strip_prefix("workspace>>") {
hyprland.active_id = active_ws
.parse()
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
updated = true;
match hyprland.workspaces.iter().find(|ws| ws.name == active_ws) {
Some(ws) => {
hyprland.active_id = ws.id;
updated = true;
}
None => return Err(io::Error::new(io::ErrorKind::InvalidData, "Unknown workspace"))
}
} else if let Some(data) = event.strip_prefix("focusedmon>>") {
let (_monitor, active_ws) = data.split_once(',').ok_or_else(|| {
io::Error::new(io::ErrorKind::InvalidData, "Too few fields in data")
})?;

hyprland.active_id = active_ws
.parse()
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
updated = true;
match hyprland.workspaces.iter().find(|ws| ws.name == active_ws) {
Some(ws) => {
hyprland.active_id = ws.id;
updated = true;
}
None => return Err(io::Error::new(io::ErrorKind::InvalidData, "Unknown workspace"))
}
} else if event.contains("workspace>>") {
hyprland.workspaces = hyprland.ipc.query_sorted_workspaces()?;
updated = true;
Expand Down

0 comments on commit db53e9e

Please sign in to comment.