1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
mod error;
use error::{Error, Result};
pub mod model;
use crate::model::*;
use xmodmap_pke_umberwm::xmodmap_pke;
mod geometries;
mod keycode;
mod serializable_conf;
mod serializable_state;
use serializable_state::load_serializable_state;
mod umberwm_impl;
use std::collections::HashMap;
pub fn umberwm_from_conf() -> Result<UmberWm> {
let res: SerializableConf =
SerializableConf::load().map_err(|_| Error::FailedToDeserializeFromJson("".to_string()))?;
Ok(umberwm(Conf {
serializable: res,
custom_actions: HashMap::new(),
events_callbacks: EventsCallbacks {
on_change_workspace: None,
},
}))
}
pub fn umberwm(conf: Conf) -> UmberWm {
let (conn, _) = xcb::Connection::connect(None).unwrap();
let serializable_state = load_serializable_state(&conf).unwrap();
let xmodmap_pke_res = xmodmap_pke(&conn).unwrap();
let mut wm = UmberWm {
conf,
current_workspace: serializable_state.current_workspace,
float_windows: serializable_state.float_windows,
overlay_windows: serializable_state.overlay_windows,
workspaces: serializable_state.workspaces,
conn,
button_press_geometry: None,
mouse_move_start: None,
xmodmap_pke: xmodmap_pke_res,
displays_geometries: Vec::new(),
randr_base: 0,
previous_display: 0,
};
wm.init();
wm
}