aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Overbruck <mail@duncano.de>2025-03-27 19:38:14 +0100
committerIvan Molodetskikh <yalterz@gmail.com>2025-05-10 12:14:41 -0700
commit9d3d7cb0e973827e5fcaa5d312a05695564a44c0 (patch)
treed8b340220a4127d79a18d2e634ce80d13dd6048c
parent398bc78ea073e0e61c6ba67ddcbaad0a5d574eeb (diff)
downloadniri-9d3d7cb0e973827e5fcaa5d312a05695564a44c0.tar.gz
niri-9d3d7cb0e973827e5fcaa5d312a05695564a44c0.tar.bz2
niri-9d3d7cb0e973827e5fcaa5d312a05695564a44c0.zip
add {toggle,set,unset}-urgent cli actions
-rw-r--r--niri-config/src/lib.rs9
-rw-r--r--niri-ipc/src/lib.rs18
-rw-r--r--src/input/mod.rs31
3 files changed, 58 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index 287b630d..b63cdd03 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -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),
}
}
}
diff --git a/niri-ipc/src/lib.rs b/niri-ipc/src/lib.rs
index fcb2d1ff..86388f16 100644
--- a/niri-ipc/src/lib.rs
+++ b/niri-ipc/src/lib.rs
@@ -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.
diff --git a/src/input/mod.rs b/src/input/mod.rs
index 1f790f16..1204ff5b 100644
--- a/src/input/mod.rs
+++ b/src/input/mod.rs
@@ -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);
+ }
+ }
}
}