aboutsummaryrefslogtreecommitdiff
path: root/src/ipc/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipc/server.rs')
-rw-r--r--src/ipc/server.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/ipc/server.rs b/src/ipc/server.rs
index d493e861..bedfe48f 100644
--- a/src/ipc/server.rs
+++ b/src/ipc/server.rs
@@ -22,6 +22,7 @@ pub struct IpcServer {
}
struct ClientCtx {
+ event_loop: LoopHandle<'static, State>,
ipc_outputs: Rc<RefCell<HashMap<String, niri_ipc::Output>>>,
}
@@ -85,6 +86,7 @@ fn on_new_ipc_client(state: &mut State, stream: UnixStream) {
};
let ctx = ClientCtx {
+ event_loop: state.niri.event_loop.clone(),
ipc_outputs: state.backend.ipc_outputs(),
};
@@ -115,6 +117,13 @@ async fn handle_client(ctx: ClientCtx, stream: Async<'_, UnixStream>) -> anyhow:
let ipc_outputs = ctx.ipc_outputs.borrow().clone();
Response::Outputs(ipc_outputs)
}
+ Request::Action(action) => {
+ let action = niri_config::Action::from(action);
+ ctx.event_loop.insert_idle(move |state| {
+ state.do_action(action);
+ });
+ return Ok(());
+ }
};
let buf = serde_json::to_vec(&response).context("error formatting response")?;