diff options
| author | Duncan Overbruck <mail@duncano.de> | 2025-03-21 17:48:47 +0100 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-10 12:14:41 -0700 |
| commit | caa6189448cbf338c18fe6afe313f577c8378b31 (patch) | |
| tree | 97ce7ecb2a94481639e0251c7ce1d3daf27e51cb /src | |
| parent | 86f57c2ec775d4aa08bf310c94b22ea266eaa9e9 (diff) | |
| download | niri-caa6189448cbf338c18fe6afe313f577c8378b31.tar.gz niri-caa6189448cbf338c18fe6afe313f577c8378b31.tar.bz2 niri-caa6189448cbf338c18fe6afe313f577c8378b31.zip | |
add workspace urgency ipc event
Diffstat (limited to 'src')
| -rw-r--r-- | src/ipc/client.rs | 3 | ||||
| -rw-r--r-- | src/ipc/server.rs | 7 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 4 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/ipc/client.rs b/src/ipc/client.rs index 6f969703..654890ab 100644 --- a/src/ipc/client.rs +++ b/src/ipc/client.rs @@ -405,6 +405,9 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> { Event::WorkspacesChanged { workspaces } => { println!("Workspaces changed: {workspaces:?}"); } + Event::WorkspaceUrgencyChanged { id, urgent } => { + println!("Workspace {id}: urgency changed to {urgent}"); + } Event::WorkspaceActivated { id, focused } => { let word = if focused { "focused" } else { "activated" }; println!("Workspace {word}: {id}"); diff --git a/src/ipc/server.rs b/src/ipc/server.rs index 06ff0fd1..b3901998 100644 --- a/src/ipc/server.rs +++ b/src/ipc/server.rs @@ -579,6 +579,12 @@ impl State { }); } + // Check if this workspace urgent state changed. + let urgent = ws.is_urgent(); + if urgent != ipc_ws.is_urgent { + events.push(Event::WorkspaceUrgencyChanged { id, urgent }); + } + // Check if this workspace became focused. let is_focused = Some(id) == focused_ws_id; if is_focused && !ipc_ws.is_focused { @@ -610,6 +616,7 @@ impl State { idx: u8::try_from(ws_idx + 1).unwrap_or(u8::MAX), name: ws.name().cloned(), output: mon.map(|mon| mon.output_name().clone()), + is_urgent: ws.is_urgent(), is_active: mon.is_some_and(|mon| mon.active_workspace_idx() == ws_idx), is_focused: Some(id) == focused_ws_id, active_window_id: ws.active_window().map(|win| win.id().get()), diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 6ae045f7..c6662214 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1608,6 +1608,10 @@ impl<W: LayoutElement> Workspace<W> { self.scrolling.scroll_amount_to_activate(window) } + pub fn is_urgent(&self) -> bool { + self.windows().any(|win| win.is_urgent()) + } + pub fn activate_window(&mut self, window: &W::Id) -> bool { if self.floating.activate_window(window) { self.floating_is_active = FloatingActive::Yes; |
