leftwm_core/
display_servers.rs1#[cfg(test)]
2mod mock_display_server;
3
4use crate::config::Config;
5use crate::display_action::DisplayAction;
6use crate::models::Handle;
7use crate::models::Window;
8use crate::models::WindowHandle;
9use crate::models::Workspace;
10use crate::DisplayEvent;
11
12use futures::prelude::*;
13use std::pin::Pin;
14
15#[cfg(test)]
16pub use self::mock_display_server::MockDisplayServer;
17
18pub trait DisplayServer<H: Handle> {
19 fn new(config: &impl Config) -> Self;
20
21 fn get_next_events(&mut self) -> Vec<DisplayEvent<H>>;
22
23 fn reload_config(
24 &mut self,
25 config: &impl Config,
26 focused: Option<WindowHandle<H>>,
27 windows: &[Window<H>],
28 );
29
30 fn update_windows(&self, _windows: Vec<&Window<H>>) {}
31
32 fn update_workspaces(&self, _focused: Option<&Workspace>) {}
33
34 fn execute_action(&mut self, _act: DisplayAction<H>) -> Option<DisplayEvent<H>> {
35 None
36 }
37
38 fn wait_readable(&self) -> Pin<Box<dyn Future<Output = ()>>>;
39
40 fn flush(&self);
41
42 fn generate_verify_focus_event(&self) -> Option<DisplayEvent<H>>;
43}