diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ipc/client.rs | 15 | ||||
| -rw-r--r-- | src/ipc/server.rs | 13 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/ipc/client.rs b/src/ipc/client.rs index 3aa5eb22..4709f57a 100644 --- a/src/ipc/client.rs +++ b/src/ipc/client.rs @@ -1,5 +1,7 @@ use anyhow::{anyhow, bail, Context}; -use niri_ipc::{LogicalOutput, Mode, Output, Request, Response, Socket, Transform}; +use niri_ipc::{ + LogicalOutput, Mode, Output, OutputConfigChanged, Request, Response, Socket, Transform, +}; use serde_json::json; use crate::cli::Msg; @@ -241,10 +243,15 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> { bail!("unexpected response: expected Handled, got {response:?}"); }; } - Msg::Output { .. } => { - let Response::Handled = response else { - bail!("unexpected response: expected Handled, got {response:?}"); + Msg::Output { output, .. } => { + let Response::OutputConfigChanged(response) = response else { + bail!("unexpected response: expected OutputConfigChanged, got {response:?}"); }; + + if response == OutputConfigChanged::OutputWasMissing { + println!("Output \"{output}\" is not connected."); + println!("The change will apply when it is connected."); + } } } diff --git a/src/ipc/server.rs b/src/ipc/server.rs index 59f929d8..251f70bc 100644 --- a/src/ipc/server.rs +++ b/src/ipc/server.rs @@ -8,7 +8,7 @@ use calloop::io::Async; use directories::BaseDirs; use futures_util::io::{AsyncReadExt, BufReader}; use futures_util::{AsyncBufReadExt, AsyncWriteExt}; -use niri_ipc::{Reply, Request, Response}; +use niri_ipc::{OutputConfigChanged, Reply, Request, Response}; use smithay::desktop::Window; use smithay::reexports::calloop::generic::Generic; use smithay::reexports::calloop::{Interest, LoopHandle, Mode, PostAction}; @@ -170,10 +170,19 @@ fn process(ctx: &ClientCtx, request: Request) -> Reply { Response::Handled } Request::Output { output, action } => { + let ipc_outputs = ctx.ipc_outputs.lock().unwrap(); + let response = if ipc_outputs.contains_key(&output) { + OutputConfigChanged::Applied + } else { + OutputConfigChanged::OutputWasMissing + }; + drop(ipc_outputs); + ctx.event_loop.insert_idle(move |state| { state.apply_transient_output_config(&output, action); }); - Response::Handled + + Response::OutputConfigChanged(response) } }; |
