From 8d94ca5d77d6e2a189d299b8b88a461ba2e621c6 Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Wed, 21 Aug 2024 20:03:00 +0200 Subject: Add toggle_maximize/toggle_fullscreen IPC dispatch actions Same shape as the existing toggle_visibility/focus/close dispatch actions - lets an external script (or a live diagnostic check) drive either without a keybinding already existing to trigger it. Immediately useful for verifying the maximize/fullscreen contract on a live session without synthesizing any input at all. --- crates/ctl/src/main.rs | 8 ++++++-- crates/platform/src/ipc.rs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/crates/ctl/src/main.rs b/crates/ctl/src/main.rs index 2c3c3db..a82fe4a 100644 --- a/crates/ctl/src/main.rs +++ b/crates/ctl/src/main.rs @@ -12,6 +12,8 @@ //! srd dispatch toggle_visibility ID hide/show a window //! srd dispatch focus ID //! srd dispatch close ID +//! srd dispatch toggle_maximize ID +//! srd dispatch toggle_fullscreen ID //! //! The socket is Unix-domain; on platforms without one this always fails //! cleanly rather than not building at all, since it's one binary in a @@ -48,8 +50,8 @@ fn build_request(args: &[String]) -> Result { Some("monitors") => Ok(r#"{"cmd":"monitors"}"#.to_string()), Some("subscribe") => Ok(r#"{"cmd":"subscribe"}"#.to_string()), Some("dispatch") => { - let action = args.get(1).ok_or("dispatch needs an action (toggle_visibility/focus/close)")?; - if !matches!(action.as_str(), "toggle_visibility" | "focus" | "close") { + let action = args.get(1).ok_or("dispatch needs an action (toggle_visibility/focus/close/toggle_maximize/toggle_fullscreen)")?; + if !matches!(action.as_str(), "toggle_visibility" | "focus" | "close" | "toggle_maximize" | "toggle_fullscreen") { return Err(format!("unknown dispatch action '{action}'")); } let id: u64 = args.get(2).ok_or("dispatch needs a window id")?.parse().map_err(|_| "window id must be a number".to_string())?; @@ -67,6 +69,8 @@ fn print_usage() { eprintln!(" srd dispatch toggle_visibility "); eprintln!(" srd dispatch focus "); eprintln!(" srd dispatch close "); + eprintln!(" srd dispatch toggle_maximize "); + eprintln!(" srd dispatch toggle_fullscreen "); } #[cfg(unix)] diff --git a/crates/platform/src/ipc.rs b/crates/platform/src/ipc.rs index 098593b..2b75b8e 100644 --- a/crates/platform/src/ipc.rs +++ b/crates/platform/src/ipc.rs @@ -394,6 +394,20 @@ fn handle_request(line: &[u8], wm: &std::rc::Rc { + let Some(id) = id else { return (err("missing id"), false) }; + wm.borrow_mut().toggle_maximize(id); + (ok(), true) + } + "toggle_fullscreen" => { + let Some(id) = id else { return (err("missing id"), false) }; + wm.borrow_mut().toggle_fullscreen(id); + (ok(), true) + } _ => (err("unknown command"), false), } } -- cgit v1.2.3