From abac766e92d29d9ee60f8ee84db0de3ee894112a Mon Sep 17 00:00:00 2001 From: missing <4a656666official@gmail.com> Date: Wed, 29 Jun 2022 12:39:18 -0500 Subject: [PATCH] hacky workaround to actually close focused client --- src/msg_listener.rs | 2 +- src/x11/client.rs | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/msg_listener.rs b/src/msg_listener.rs index c7a17b0..ec014e6 100644 --- a/src/msg_listener.rs +++ b/src/msg_listener.rs @@ -52,7 +52,7 @@ pub async fn on_recv( conn: &mut Dpy, ) -> Result<()> { match &*data { - "close" => manager.remove_focused_client(conn).await?, + "close" => manager.destroy_focused_client(conn).await?, _ => println!("{}", data), } Ok(()) diff --git a/src/x11/client.rs b/src/x11/client.rs index ada89f5..f24d4cc 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -570,12 +570,23 @@ impl XcrabWindowManager { Ok(()) } - pub async fn remove_focused_client( + pub async fn destroy_focused_client( &mut self, conn: &mut Dpy, ) -> Result<()> { if let Some(focused) = self.focused { - self.remove_client(conn, focused).await + let client_key = *self + .clients + .get(&focused) + .ok_or(XcrabError::ClientDoesntExist)?; + + self.remove_client(conn, focused).await?; + + let client = self.rects.get(client_key).unwrap(); + + client.unwrap_client().frame.win.free_async(conn).await?; + + Ok(()) } else { Ok(()) }