1mod event_loop;
9mod menu_state;
10mod server_generator;
11mod server_status;
12mod tray_wrapper;
13use event_loop::setup_event_loop;
14use tray_wrapper::{TrayWrapper, TrayWrapperError};
15
16pub use server_generator::{ContinueRunning, ServerGenerator, ServerGeneratorResult};
18use thiserror::Error;
19
20pub fn create_tray_wrapper(
21 icon_data: &[u8],
22 server_gen: ServerGenerator,
23) -> Result<(), CreateTrayWrapperError> {
24 let event_loop = setup_event_loop();
25 let mut tw = TrayWrapper::new(icon_data, event_loop.create_proxy(), server_gen)?;
26
27 #[cfg(target_os = "linux")]
29 {
30 gtk::init().unwrap();
31 }
32
33 event_loop.run_app(&mut tw)?;
34
35 Ok(())
36}
37
38#[derive(Error, Debug)]
39pub enum CreateTrayWrapperError {
40 #[error(transparent)]
41 TrayWrapper(#[from] TrayWrapperError),
42 #[error(transparent)]
43 Winit(#[from] winit::error::EventLoopError),
44 #[cfg(target_os = "linux")]
45 #[error("Gtk Failed to Init {0}")]
46 Gtk(#[from] glib::error::BoolError),
47}