@@ -431,29 +431,10 @@ impl<R: Runtime> App<R> {
431431 self . runtime . take ( ) . unwrap ( ) . run ( move |event| match event {
432432 RunEvent :: Exit => {
433433 app_handle. cleanup_before_exit ( ) ;
434- callback ( & app_handle, Event :: Exit ) ;
434+ on_event_loop_event ( & app_handle, RunEvent :: Exit , & manager , Some ( & callback ) ) ;
435435 }
436436 _ => {
437- on_event_loop_event ( & event, & manager) ;
438- callback (
439- & app_handle,
440- match event {
441- RunEvent :: Exit => Event :: Exit ,
442- RunEvent :: ExitRequested { window_label, tx } => Event :: ExitRequested {
443- window_label,
444- api : ExitRequestApi ( tx) ,
445- } ,
446- RunEvent :: CloseRequested { label, signal_tx } => Event :: CloseRequested {
447- label,
448- api : CloseRequestApi ( signal_tx) ,
449- } ,
450- RunEvent :: WindowClose ( label) => Event :: WindowClosed ( label) ,
451- RunEvent :: Ready => Event :: Ready ,
452- RunEvent :: Resumed => Event :: Resumed ,
453- RunEvent :: MainEventsCleared => Event :: MainEventsCleared ,
454- _ => unimplemented ! ( ) ,
455- } ,
456- ) ;
437+ on_event_loop_event ( & app_handle, event, & manager, Some ( & callback) ) ;
457438 }
458439 } ) ;
459440 }
@@ -481,11 +462,15 @@ impl<R: Runtime> App<R> {
481462 #[ cfg( any( target_os = "windows" , target_os = "macos" ) ) ]
482463 pub fn run_iteration ( & mut self ) -> crate :: runtime:: RunIteration {
483464 let manager = self . manager . clone ( ) ;
484- self
485- . runtime
486- . as_mut ( )
487- . unwrap ( )
488- . run_iteration ( move |event| on_event_loop_event ( & event, & manager) )
465+ let app_handle = self . handle ( ) ;
466+ self . runtime . as_mut ( ) . unwrap ( ) . run_iteration ( move |event| {
467+ on_event_loop_event (
468+ & app_handle,
469+ event,
470+ & manager,
471+ Option :: < & Box < dyn Fn ( & AppHandle < R > , Event ) > > :: None ,
472+ )
473+ } )
489474 }
490475}
491476
@@ -1042,10 +1027,43 @@ impl<R: Runtime> Builder<R> {
10421027 }
10431028}
10441029
1045- fn on_event_loop_event < R : Runtime > ( event : & RunEvent , manager : & WindowManager < R > ) {
1046- if let RunEvent :: WindowClose ( label) = event {
1030+ fn on_event_loop_event < R : Runtime , F : Fn ( & AppHandle < R > , Event ) + ' static > (
1031+ app_handle : & AppHandle < R > ,
1032+ event : RunEvent ,
1033+ manager : & WindowManager < R > ,
1034+ callback : Option < & F > ,
1035+ ) {
1036+ if let RunEvent :: WindowClose ( label) = & event {
10471037 manager. on_window_close ( label) ;
10481038 }
1039+
1040+ let event = match event {
1041+ RunEvent :: Exit => Event :: Exit ,
1042+ RunEvent :: ExitRequested { window_label, tx } => Event :: ExitRequested {
1043+ window_label,
1044+ api : ExitRequestApi ( tx) ,
1045+ } ,
1046+ RunEvent :: CloseRequested { label, signal_tx } => Event :: CloseRequested {
1047+ label,
1048+ api : CloseRequestApi ( signal_tx) ,
1049+ } ,
1050+ RunEvent :: WindowClose ( label) => Event :: WindowClosed ( label) ,
1051+ RunEvent :: Ready => Event :: Ready ,
1052+ RunEvent :: Resumed => Event :: Resumed ,
1053+ RunEvent :: MainEventsCleared => Event :: MainEventsCleared ,
1054+ _ => unimplemented ! ( ) ,
1055+ } ;
1056+
1057+ manager
1058+ . inner
1059+ . plugins
1060+ . lock ( )
1061+ . expect ( "poisoned plugin store" )
1062+ . on_event ( app_handle, & event) ;
1063+
1064+ if let Some ( c) = callback {
1065+ c ( app_handle, event) ;
1066+ }
10491067}
10501068
10511069/// Make `Wry` the default `Runtime` for `Builder`
0 commit comments