diff --git a/apps/magpie/src/protocol.rs b/apps/magpie/src/protocol.rs index 9e80597..ee3758c 100644 --- a/apps/magpie/src/protocol.rs +++ b/apps/magpie/src/protocol.rs @@ -29,6 +29,12 @@ pub struct CreatePanel { pub init_msg: Vec, } +/// Closes a Magpie panel with a given ID. +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct ClosePanel { + pub id: PanelId, +} + /// Sends a panel a message. #[derive(Clone, Debug, Deserialize, Serialize)] pub struct SendMessage { @@ -41,6 +47,7 @@ pub struct SendMessage { #[serde(tag = "kind")] pub enum MagpieServerMsg { CreatePanel(CreatePanel), + ClosePanel(ClosePanel), SendMessage(SendMessage), } diff --git a/apps/magpie/src/service/ipc.rs b/apps/magpie/src/service/ipc.rs index 6ca7484..0f76385 100644 --- a/apps/magpie/src/service/ipc.rs +++ b/apps/magpie/src/service/ipc.rs @@ -151,6 +151,12 @@ impl Client { }; let _ = self.window_sender.send_event(msg); } + MagpieServerMsg::ClosePanel(ClosePanel { id }) => { + if let Some(id) = self.id_to_window.get(&id).copied() { + let msg = WindowMessage::CloseWindow { id }; + let _ = self.window_sender.send_event(msg); + } + } MagpieServerMsg::SendMessage(SendMessage { id, msg }) => { if let Some(id) = self.id_to_window.get(&id).cloned() { let msg = WindowMessage::SendMessage { id, msg };