leftwm_core/
display_servers.rs

1#[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}