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 version: Option<String>,
23 server_gen: ServerGenerator,
24) -> Result<(), CreateTrayWrapperError> {
25 let event_loop = setup_event_loop();
26 let mut tw = TrayWrapper::new(icon_data, version, event_loop.create_proxy(), server_gen)?;
27
28 #[cfg(target_os = "linux")]
30 {
31 gtk::init().unwrap();
32 }
33
34 event_loop.run_app(&mut tw)?;
35
36 Ok(())
37}
38
39#[derive(Error, Debug)]
40pub enum CreateTrayWrapperError {
41 #[error(transparent)]
42 TrayWrapper(#[from] TrayWrapperError),
43 #[error(transparent)]
44 Winit(#[from] winit::error::EventLoopError),
45 #[cfg(target_os = "linux")]
46 #[error("Gtk Failed to Init {0}")]
47 Gtk(#[from] glib::error::BoolError),
48}