aboutsummaryrefslogtreecommitdiff
path: root/src/ipc
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-09-02 09:05:18 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-09-01 23:47:19 -0700
commit64a935192143286d59b94de00ba4726dadf0fd79 (patch)
tree65efcb34555aaef6a8f3cf35c3c4d45cd29c6cc1 /src/ipc
parent332af8b062d93aa542c639d663199fde568172f7 (diff)
downloadniri-64a935192143286d59b94de00ba4726dadf0fd79.tar.gz
niri-64a935192143286d59b94de00ba4726dadf0fd79.tar.bz2
niri-64a935192143286d59b94de00ba4726dadf0fd79.zip
Add niri msg windows
Diffstat (limited to 'src/ipc')
-rw-r--r--src/ipc/client.rs40
-rw-r--r--src/ipc/server.rs5
2 files changed, 45 insertions, 0 deletions
diff --git a/src/ipc/client.rs b/src/ipc/client.rs
index ea6121dc..0f4d6228 100644
--- a/src/ipc/client.rs
+++ b/src/ipc/client.rs
@@ -20,6 +20,7 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> {
action: action.clone(),
},
Msg::Workspaces => Request::Workspaces,
+ Msg::Windows => Request::Windows,
Msg::KeyboardLayouts => Request::KeyboardLayouts,
Msg::EventStream => Request::EventStream,
Msg::RequestError => Request::ReturnError,
@@ -155,6 +156,45 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> {
println!("No window is focused.");
}
}
+ Msg::Windows => {
+ let Response::Windows(mut windows) = response else {
+ bail!("unexpected response: expected Windows, got {response:?}");
+ };
+
+ if json {
+ let windows =
+ serde_json::to_string(&windows).context("error formatting response")?;
+ println!("{windows}");
+ return Ok(());
+ }
+
+ windows.sort_unstable_by(|a, b| a.id.cmp(&b.id));
+
+ for window in windows {
+ let focused = if window.is_focused { " (focused)" } else { "" };
+ println!("Window ID {}:{focused}", window.id);
+
+ if let Some(title) = window.title {
+ println!(" Title: \"{title}\"");
+ } else {
+ println!(" Title: (unset)");
+ }
+
+ if let Some(app_id) = window.app_id {
+ println!(" App ID: \"{app_id}\"");
+ } else {
+ println!(" App ID: (unset)");
+ }
+
+ if let Some(workspace_id) = window.workspace_id {
+ println!(" Workspace ID: {workspace_id}");
+ } else {
+ println!(" Workspace ID: (none)");
+ }
+
+ println!();
+ }
+ }
Msg::FocusedOutput => {
let Response::FocusedOutput(output) = response else {
bail!("unexpected response: expected FocusedOutput, got {response:?}");
diff --git a/src/ipc/server.rs b/src/ipc/server.rs
index dcdfc3fb..6990cd41 100644
--- a/src/ipc/server.rs
+++ b/src/ipc/server.rs
@@ -260,6 +260,11 @@ async fn process(ctx: &ClientCtx, request: Request) -> Reply {
let workspaces = state.workspaces.workspaces.values().cloned().collect();
Response::Workspaces(workspaces)
}
+ Request::Windows => {
+ let state = ctx.event_stream_state.borrow();
+ let windows = state.windows.windows.values().cloned().collect();
+ Response::Windows(windows)
+ }
Request::KeyboardLayouts => {
let state = ctx.event_stream_state.borrow();
let layout = state.keyboard_layouts.keyboard_layouts.clone();