tray_wrapper/
event_loop.rs

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