@@ -13,7 +13,7 @@ use crate::widget_state::WidgetState;
1313/// as a parameter.
1414#[ derive( Component , Clone ) ]
1515pub struct OnEvent {
16- has_initialized : bool ,
16+ has_initialized : Arc < RwLock < bool > > ,
1717 system : Arc < RwLock < dyn System < In = Entity , Out = ( ) > > > ,
1818}
1919
@@ -22,7 +22,6 @@ impl Default for OnEvent {
2222 Self :: new ( |In ( _entity) | { } )
2323 }
2424}
25-
2625impl OnEvent {
2726 /// Create a new event handler
2827 ///
@@ -31,7 +30,7 @@ impl OnEvent {
3130 /// 2. The event
3231 pub fn new < Params > ( system : impl IntoSystem < Entity , ( ) , Params > ) -> OnEvent {
3332 Self {
34- has_initialized : false ,
33+ has_initialized : Arc :: new ( RwLock :: new ( false ) ) ,
3534 system : Arc :: new ( RwLock :: new ( IntoSystem :: into_system ( system) ) ) ,
3635 }
3736 }
@@ -48,21 +47,23 @@ impl OnEvent {
4847 world : & mut World ,
4948 ) -> ( EventDispatcherContext , KEvent ) {
5049 if let Ok ( mut system) = self . system . try_write ( ) {
51- if !self . has_initialized {
52- system. initialize ( world) ;
53- self . has_initialized = true ;
50+ if let Ok ( mut has_initialized) = self . has_initialized . try_write ( ) {
51+ if !* has_initialized {
52+ system. initialize ( world) ;
53+ * has_initialized = true ;
54+ }
5455 }
5556 // Insert resources
5657 world. insert_resource ( event_dispatcher_context) ;
5758 world. insert_resource ( widget_state) ;
5859 world. insert_resource ( event) ;
5960
6061 system. run ( entity, world) ;
62+ system. apply_buffers ( world) ;
6163
6264 event_dispatcher_context = world. remove_resource :: < EventDispatcherContext > ( ) . unwrap ( ) ;
6365 event = world. remove_resource :: < KEvent > ( ) . unwrap ( ) ;
64-
65- system. apply_buffers ( world) ;
66+ world. remove_resource :: < WidgetState > ( ) . unwrap ( ) ;
6667 }
6768 ( event_dispatcher_context, event)
6869 }
0 commit comments