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