Skip to content

Commit

Permalink
hyprland: Fixed active workspace selection with named workspaces (#36)
Browse files Browse the repository at this point in the history
  • Loading branch information
f-str authored Oct 6, 2024
1 parent 1bf110c commit 778e884
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions src/wm_info_provider/hyprland.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,18 +114,28 @@ 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))?;
let ws = hyprland
.workspaces
.iter()
.find(|ws| ws.name == active_ws)
.ok_or_else(|| {
io::Error::new(io::ErrorKind::InvalidData, "Unknown workspace")
})?;
hyprland.active_id = ws.id;
updated = true;
} 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))?;
let ws = hyprland
.workspaces
.iter()
.find(|ws| ws.name == active_ws)
.ok_or_else(|| {
io::Error::new(io::ErrorKind::InvalidData, "Unknown workspace")
})?;
hyprland.active_id = ws.id;
updated = true;
} else if event.contains("workspace>>") {
hyprland.workspaces = hyprland.ipc.query_sorted_workspaces()?;
Expand Down

0 comments on commit 778e884

Please sign in to comment.