1 use crate::config::Config; 2 use crate::display_action::DisplayAction; 3 use crate::models::Window; 4 use crate::models::Workspace; 5 use crate::state::State; 6 use crate::DisplayEvent; 7 #[cfg(test)] 8 mod mock_display_server; 9 pub mod xlib_display_server; 10 use futures::prelude::*; 11 use std::pin::Pin; 12 13 #[cfg(test)] 14 pub use self::mock_display_server::MockDisplayServer; 15 pub use self::xlib_display_server::XlibDisplayServer; 16 17 pub trait DisplayServer { new(config: &impl Config) -> Self18 fn new(config: &impl Config) -> Self; 19 get_next_events(&mut self) -> Vec<DisplayEvent>20 fn get_next_events(&mut self) -> Vec<DisplayEvent>; 21 load_config(&mut self, _config: &impl Config)22 fn load_config(&mut self, _config: &impl Config) {} 23 update_windows(&self, _windows: Vec<&Window>, _focused: Option<&Window>, _state: &State)24 fn update_windows(&self, _windows: Vec<&Window>, _focused: Option<&Window>, _state: &State) {} 25 update_workspaces(&self, _windows: Vec<&Workspace>, _focused: Option<&Workspace>)26 fn update_workspaces(&self, _windows: Vec<&Workspace>, _focused: Option<&Workspace>) {} 27 execute_action(&mut self, _act: DisplayAction) -> Option<DisplayEvent>28 fn execute_action(&mut self, _act: DisplayAction) -> Option<DisplayEvent> { 29 None 30 } 31 wait_readable(&self) -> Pin<Box<dyn Future<Output = ()>>>32 fn wait_readable(&self) -> Pin<Box<dyn Future<Output = ()>>>; 33 flush(&self)34 fn flush(&self); 35 generate_verify_focus_event(&self) -> Option<DisplayEvent>36 fn generate_verify_focus_event(&self) -> Option<DisplayEvent>; 37 } 38