@@ -741,6 +741,7 @@ xcb::atoms_struct! {
741
741
wm_protocols => b"WM_PROTOCOLS" only_if_exists = false ,
742
742
wm_delete_window => b"WM_DELETE_WINDOW" only_if_exists = false ,
743
743
wm_transient_for => b"WM_TRANSIENT_FOR" only_if_exists = false ,
744
+ wm_state => b"WM_STATE" only_if_exists = false ,
744
745
wm_check => b"_NET_SUPPORTING_WM_CHECK" only_if_exists = false ,
745
746
net_wm_name => b"_NET_WM_NAME" only_if_exists = false ,
746
747
wm_pid => b"_NET_WM_PID" only_if_exists = false ,
@@ -867,6 +868,25 @@ impl TryFrom<u32> for SetState {
867
868
}
868
869
}
869
870
871
+ #[ derive( Debug , Clone , Copy ) ]
872
+ pub enum WmState {
873
+ Withdrawn = 0 ,
874
+ Normal = 1 ,
875
+ Iconic = 3 ,
876
+ }
877
+
878
+ impl TryFrom < u32 > for WmState {
879
+ type Error = ( ) ;
880
+ fn try_from ( value : u32 ) -> Result < Self , Self :: Error > {
881
+ match value {
882
+ 0 => Ok ( Self :: Withdrawn ) ,
883
+ 1 => Ok ( Self :: Normal ) ,
884
+ 3 => Ok ( Self :: Iconic ) ,
885
+ _ => Err ( ( ) ) ,
886
+ }
887
+ }
888
+ }
889
+
870
890
pub struct RealConnection {
871
891
atoms : Atoms ,
872
892
connection : Rc < xcb:: Connection > ,
@@ -985,6 +1005,15 @@ impl XConnection for RealConnection {
985
1005
} ) {
986
1006
debug ! ( "ChangeProperty failed ({:?}: {:?})" , window, e) ;
987
1007
}
1008
+ if let Err ( e) = self . connection . send_and_check_request ( & x:: ChangeProperty {
1009
+ mode : x:: PropMode :: Replace ,
1010
+ window,
1011
+ property : self . atoms . wm_state ,
1012
+ r#type : self . atoms . wm_state ,
1013
+ data : & [ WmState :: Normal as u32 , 0 ] ,
1014
+ } ) {
1015
+ debug ! ( "ChangeProperty failed ({:?}: {:?})" , window, e) ;
1016
+ }
988
1017
989
1018
if let Some ( name) = output_name {
990
1019
let Some ( output) = self . outputs . get ( & name) . copied ( ) else {
0 commit comments