libwmctl/model/
map_state.rs

1use std::fmt;
2use x11rb::protocol::xproto;
3
4use crate::{WmCtlError, WmCtlResult};
5
6/// MapState provides an easy way to identify the differnt window map values
7#[allow(dead_code)]
8#[derive(Debug, Clone, PartialEq)]
9pub enum MapState {
10    Unmapped,
11    Unviewable,
12    Viewable,
13}
14
15// Convert from u32 to state
16impl MapState {
17    pub fn from(val: u32) -> WmCtlResult<MapState> {
18        if val == xproto::MapState::UNMAPPED.into() {
19            Ok(MapState::Unmapped)
20        } else if val == xproto::MapState::UNVIEWABLE.into() {
21            Ok(MapState::Unviewable)
22        } else if val == xproto::MapState::VIEWABLE.into() {
23            Ok(MapState::Viewable)
24        } else {
25            Err(WmCtlError::InvalidWinMap(val).into())
26        }
27    }
28}
29
30// Implement format! support
31impl fmt::Display for MapState {
32    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
33        match self {
34            _ => write!(f, "{}", format!("{:?}", self).to_lowercase()),
35        }
36    }
37}