mod event_loop;
mod menu_state;
mod server_generator;
mod server_loop;
mod server_status;
mod tray_wrapper;
use event_loop::setup_event_loop;
use tray_wrapper::{TrayWrapper, TrayWrapperError};
pub use server_generator::{ContinueRunning, ServerGenerator, ServerGeneratorResult};
use thiserror::Error;
pub fn create_tray_wrapper(
icon_data: &[u8],
version: Option<String>,
server_gen: ServerGenerator,
) -> Result<(), CreateTrayWrapperError> {
let event_loop = setup_event_loop();
let mut tw = TrayWrapper::new(icon_data, version, event_loop.create_proxy(), server_gen)?;
#[cfg(target_os = "linux")]
{
gtk::init().unwrap();
}
event_loop.run_app(&mut tw)?;
Ok(())
}
#[derive(Error, Debug)]
pub enum CreateTrayWrapperError {
#[error(transparent)]
TrayWrapper(#[from] TrayWrapperError),
#[error(transparent)]
Winit(#[from] winit::error::EventLoopError),
#[cfg(target_os = "linux")]
#[error("Gtk Failed to Init {0}")]
Gtk(#[from] glib::error::BoolError),
}