add {toggle,set,unset}-urgent cli actions

This commit is contained in:
Duncan Overbruck
2025-03-27 19:38:14 +01:00
committed by Ivan Molodetskikh
parent 398bc78ea0
commit 9d3d7cb0e9
3 changed files with 58 additions and 0 deletions
+9
View File
@@ -1874,6 +1874,12 @@ pub enum Action {
ToggleOverview,
OpenOverview,
CloseOverview,
#[knuffel(skip)]
ToggleUrgent(u64),
#[knuffel(skip)]
SetUrgent(u64),
#[knuffel(skip)]
UnsetUrgent(u64),
}
impl From<niri_ipc::Action> for Action {
@@ -2145,6 +2151,9 @@ impl From<niri_ipc::Action> for Action {
niri_ipc::Action::ToggleOverview {} => Self::ToggleOverview,
niri_ipc::Action::OpenOverview {} => Self::OpenOverview,
niri_ipc::Action::CloseOverview {} => Self::CloseOverview,
niri_ipc::Action::ToggleUrgent { id } => Self::ToggleUrgent(id),
niri_ipc::Action::SetUrgent { id } => Self::SetUrgent(id),
niri_ipc::Action::UnsetUrgent { id } => Self::UnsetUrgent(id),
}
}
}
+18
View File
@@ -803,6 +803,24 @@ pub enum Action {
OpenOverview {},
/// Close the Overview.
CloseOverview {},
/// Toggle urgent status of a window.
ToggleUrgent {
/// Id of the window to toggle urgent.
#[cfg_attr(feature = "clap", arg(long))]
id: u64,
},
/// Set urgent status of a window.
SetUrgent {
/// Id of the window to set urgent.
#[cfg_attr(feature = "clap", arg(long))]
id: u64,
},
/// Unset urgent status of a window.
UnsetUrgent {
/// Id of the window to unset urgent.
#[cfg_attr(feature = "clap", arg(long))]
id: u64,
},
}
/// Change in window or column size.
+31
View File
@@ -1971,6 +1971,37 @@ impl State {
self.niri.queue_redraw_all();
}
}
Action::ToggleUrgent(id) => {
let window = self
.niri
.layout
.workspaces_mut()
.find_map(|ws| ws.windows_mut().find(|w| w.id().get() == id));
if let Some(window) = window {
let urgent = window.is_urgent();
window.set_urgent(!urgent);
}
}
Action::SetUrgent(id) => {
let window = self
.niri
.layout
.workspaces_mut()
.find_map(|ws| ws.windows_mut().find(|w| w.id().get() == id));
if let Some(window) = window {
window.set_urgent(true);
}
}
Action::UnsetUrgent(id) => {
let window = self
.niri
.layout
.workspaces_mut()
.find_map(|ws| ws.windows_mut().find(|w| w.id().get() == id));
if let Some(window) = window {
window.set_urgent(false);
}
}
}
}