From 6abdbc81a2d3a05e449fa96abca1bf408c124e96 Mon Sep 17 00:00:00 2001 From: GoranKovac Date: Sun, 7 Dec 2025 23:02:03 +0100 Subject: [PATCH] Update WM_STATE on window map/unmap Some wine apps expect WM_STATE to be updated when mapping/unmapping windows. Unless handled properly wine app would timeout while waiting for update state Fixes #302 --- src/xstate/mod.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/xstate/mod.rs b/src/xstate/mod.rs index c35542c..9006335 100644 --- a/src/xstate/mod.rs +++ b/src/xstate/mod.rs @@ -414,6 +414,15 @@ impl XState { self.handle_window_properties(server_state, e.window()) ); server_state.map_window(e.window()); + unwrap_or_skip_bad_window_cont!(self.connection.send_and_check_request( + &x::ChangeProperty { + mode: x::PropMode::Replace, + window: e.window(), + property: self.atoms.wm_state, + r#type: self.atoms.wm_state, + data: &[WmState::Normal as u32, x::Window::none().resource_id()], + } + )); } xcb::Event::X(x::Event::ConfigureNotify(e)) => { server_state.reconfigure_window(e); @@ -445,6 +454,16 @@ impl XState { value_list: &[x::Cw::EventMask(x::EventMask::empty())], } )); + + unwrap_or_skip_bad_window_cont!(self.connection.send_and_check_request( + &x::ChangeProperty { + mode: x::PropMode::Replace, + window: e.window(), + property: self.atoms.wm_state, + r#type: self.atoms.wm_state, + data: &[WmState::Withdrawn as u32, x::Window::none().resource_id()], + } + )); } xcb::Event::X(x::Event::DestroyNotify(e)) => { debug!("destroying window {:?}", e.window());