@@ -6,11 +6,14 @@ use global_hotkey::{
66 hotkey:: { Code , HotKey , Modifiers } ,
77 GlobalHotKeyEvent , GlobalHotKeyManager , HotKeyState ,
88} ;
9- use winit:: event_loop:: { ControlFlow , EventLoopBuilder } ;
9+ use winit:: {
10+ application:: ApplicationHandler ,
11+ event:: WindowEvent ,
12+ event_loop:: { ActiveEventLoop , EventLoop } ,
13+ window:: WindowId ,
14+ } ;
1015
1116fn main ( ) {
12- let event_loop = EventLoopBuilder :: new ( ) . build ( ) . unwrap ( ) ;
13-
1417 let hotkeys_manager = GlobalHotKeyManager :: new ( ) . unwrap ( ) ;
1518
1619 let hotkey = HotKey :: new ( Some ( Modifiers :: SHIFT ) , Code :: KeyD ) ;
@@ -21,19 +24,51 @@ fn main() {
2124 hotkeys_manager. register ( hotkey2) . unwrap ( ) ;
2225 hotkeys_manager. register ( hotkey3) . unwrap ( ) ;
2326
24- let global_hotkey_channel = GlobalHotKeyEvent :: receiver ( ) ;
27+ let event_loop = EventLoop :: < AppEvent > :: with_user_event ( ) . build ( ) . unwrap ( ) ;
28+ let proxy = event_loop. create_proxy ( ) ;
29+
30+ GlobalHotKeyEvent :: set_event_handler ( Some ( move |event| {
31+ let _ = proxy. send_event ( AppEvent :: HotKey ( event) ) ;
32+ } ) ) ;
33+
34+ let mut app = App {
35+ hotkeys_manager,
36+ hotkey2,
37+ } ;
38+
39+ event_loop. run_app ( & mut app) . unwrap ( )
40+ }
41+
42+ #[ derive( Debug ) ]
43+ enum AppEvent {
44+ HotKey ( GlobalHotKeyEvent ) ,
45+ }
46+
47+ struct App {
48+ hotkeys_manager : GlobalHotKeyManager ,
49+ hotkey2 : HotKey ,
50+ }
51+
52+ impl ApplicationHandler < AppEvent > for App {
53+ fn resumed ( & mut self , _event_loop : & ActiveEventLoop ) { }
2554
26- event_loop
27- . run ( move |_event, event_loop| {
28- event_loop. set_control_flow ( ControlFlow :: Poll ) ;
55+ fn window_event (
56+ & mut self ,
57+ _event_loop : & ActiveEventLoop ,
58+ _window_id : WindowId ,
59+ _event : WindowEvent ,
60+ ) {
61+ }
2962
30- if let Ok ( event) = global_hotkey_channel. try_recv ( ) {
63+ fn user_event ( & mut self , _event_loop : & ActiveEventLoop , event : AppEvent ) {
64+ match event {
65+ AppEvent :: HotKey ( event) => {
3166 println ! ( "{event:?}" ) ;
3267
33- if hotkey2. id ( ) == event. id && event. state == HotKeyState :: Released {
34- hotkeys_manager. unregister ( hotkey2) . unwrap ( ) ;
68+ if self . hotkey2 . id ( ) == event. id && event. state == HotKeyState :: Released {
69+ self . hotkeys_manager . unregister ( self . hotkey2 ) . unwrap ( ) ;
3570 }
3671 }
37- } )
38- . unwrap ( ) ;
72+ }
73+ }
3974}
0 commit comments