tray_wrapper/
event_loop.rs

1use crate::server_status::ServerStatus;
2use tray_icon::menu::MenuEvent;
3use winit::event_loop::EventLoop;
4
5#[derive(Debug)]
6pub enum UserEvent {
7    Menu(tray_icon::menu::MenuEvent),
8    ServerStatus(ServerStatus),
9    ServerExit,
10}
11
12pub(crate) fn setup_event_loop() -> EventLoop<UserEvent> {
13    let event_loop = EventLoop::<UserEvent>::with_user_event().build().unwrap();
14
15    // set a tray event handler that forwards the event and wakes up the event loop
16    let proxy = event_loop.create_proxy();
17    MenuEvent::set_event_handler(Some(move |event| {
18        proxy
19            .send_event(UserEvent::Menu(event))
20            .expect("Menu Event loop doesn't exist");
21    }));
22
23    event_loop
24}